React Notes / учебная мастерская
← Все статьи

Компоненты

Компоненты с понятным контрактом

Передаём данные через props, а действия — через обработчики.

Компонент стоит выделять, когда у части интерфейса есть собственная задача: карточка материала, строка списка или кнопка сохранения. Props позволяют родителю сообщить, что нужно показать и какое действие выполнить.

Явные входные данные

function ArticleCard({ title, saved, onSave }) {
  return (
    <article>
      <h2>{title}</h2>
      <button onClick={onSave}>
        {saved ? 'Сохранено' : 'Сохранить'}
      </button>
    </article>
  );
}

Родитель хранит saved и передаёт обработчик onSave. Карточка сообщает о действии вызовом функции. Так источник данных остаётся понятным, а один компонент можно использовать с разными статьями.

Props доступны для чтения

Не присваивайте входному prop новое значение и не меняйте вложенный объект, полученный от родителя. Если нужен другой результат, попросите владельца состояния обновить данные. Это помогает избежать скрытых изменений между компонентами.

Практика

Соберите две карточки с разными заголовками и независимым состоянием сохранения. Затем перенесите состояние в общий родительский компонент и добавьте общий счётчик сохранённых материалов.