Обработка событий в React

В React обработка событий — это механизм, позволяющий компонентам реагировать на действия пользователя: клики, ввод текста, отправку формы, фокус и другие взаимодействия. События в React похожи на события в DOM, но имеют несколько важных отличий.

Синтаксис и соглашения

Имена событий в React пишутся в camelCase, а не в нижнем регистре, как в HTML. Например:

Обработчик передаётся как функция, а не как строка:

// Правильно
<button onClick={handleClick}>Нажми</button>

// Неправильно
<button onClick={handleClick()}>Нажми</button>

Вызов handleClick() при передаче приведёт к немедленному выполнению функции при каждом рендере, а не при клике.

Типичные события

React поддерживает стандартные события пользовательского взаимодействия:

  • onClick — нажатие кнопки или другого элемента
  • onChange — изменение значения в <input>, <select> или <textarea>
  • onSubmit — отправка формы
  • onFocus и onBlur — получение и потеря фокуса

Пример обработки отправки формы:

function Form() {
  function handleSubmit(event) {
    event.preventDefault(); // отменяет перезагрузку страницы
    console.log('Форма отправлена');
  }

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" />
      <button type="submit">Отправить</button>
    </form>
  );
}

Объект события

Обработчики получают в качестве аргумента объект события (event). Он содержит информацию о произошедшем действии и методы для управления поведением по умолчанию.

Часто используемые методы:

  • event.preventDefault() — отменяет стандартное действие (например, отправку формы)
  • event.stopPropagation() — останавливает всплытие события вверх по дереву DOM

Пример:

function handleClick(event) {
  event.stopPropagation();
  console.log('Клик только на эту кнопку');
}

Важные особенности

  • Обработчики не вызываются автоматически — они срабатывают только при соответствующем пользовательском действии.
  • Функция-обработчик должна быть передана, а не вызвана.
  • Все события в React нормализованы: они работают одинаково во всех браузерах, даже если нативные события отличаются.