0Pricing
React Academy · Урок

Шаблоны взаимодействия соседних компонентов

Синхронизируйте два соседних компонента через общее состояние родителя и props с функциями обратного вызова

«Шаблоны взаимодействия соседних компонентов» — бесплатный урок React Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Добро пожаловать

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

Соседние компоненты не могут взаимодействовать напрямую

В React данные передаются вниз через пропсы. У двух соседних компонентов нет прямой связи. Взаимодействие между ними всегда проходит через общего родителя.

Шаблон: общее состояние в родителе

Родитель хранит общее значение в состоянии и передаёт его обоим соседним компонентам: один получает его как данные (читатель), а другой получает функцию обратного вызова для его изменения (записывающий компонент).
function Parent() {
  const [selected, setSelected] = useState(null);
  return (
    <>
      <Picker onSelect={setSelected} />
      <Detail item={selected} />
    </>
  );
}

Соседние компоненты-читатель и записывающий компонент

Записывающий соседний компонент вызывает функцию обратного вызова родителя, когда пользователь делает выбор. Соседний компонент-читатель получает получившееся значение как проп. Ни один из компонентов не знает о другом.
function Picker({ onSelect }) {
  return <button onClick={() => onSelect('item-1')}>Pick item 1</button>;
}

function Detail({ item }) {
  return <p>Selected: {item}</p>;
}

Двустороннее взаимодействие

Оба соседних компонента могут одновременно читать и записывать данные. Каждый получает текущее значение AND функцию обратного вызова `onChange`. Изменение в любом компоненте обновляет общее состояние родителя, которое затем снова передаётся обоим компонентам.

Пример синхронизированных полей формы

Ползунок и числовое поле ввода управляют одним и тем же значением. Оба получают значение и `onChange` от родителя. Изменение любого компонента автоматически обновляет другой.
function VolumeControl() {
  const [vol, setVol] = useState(50);
  return (
    <>
      <input type="range" value={vol} onChange={e => setVol(+e.target.value)} />
      <input type="number" value={vol} onChange={e => setVol(+e.target.value)} />
    </>
  );
}

Как избежать антипаттерна шины событий

Не используйте глобальный диспетчер событий (EventEmitter/PubSub) для взаимодействия между соседними компонентами в React. Это обходит поток данных React, делает состояние невидимым и усложняет отладку.

Когда соседние компоненты находятся далеко друг от друга

Если соседние компоненты глубоко вложены в разных ветвях дерева, подъём состояния до их общего предка приводит к чрезмерному пробросу. В таком случае уместно использовать контекст или библиотеку управления состоянием.

Как сохранить независимость соседних компонентов

Ни один соседний компонент не должен импортировать другой или ссылаться на него. Родитель выступает координатором. Такая независимость позволяет легко заменить один компонент, не затрагивая другой.

Тестирование взаимодействия соседних компонентов

Тестируйте родительский компонент: смоделируйте действие в записывающем соседнем компоненте через интерфейс родителя и проверьте, что соседний компонент-читатель отображает правильное значение. Родитель является тестируемой единицей координации.

Быстрая проверка

Как два соседних компонента React взаимодействуют друг с другом?

Итоги

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

Далее

Следующий урок: **Выбор правильного места для состояния** — вы примените схему принятия решений для локального, поднятого или глобального состояния.

Часто задаваемые вопросы

Урок «Шаблоны взаимодействия соседних компонентов» бесплатный?

Да — полный текст урока «Шаблоны взаимодействия соседних компонентов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Шаблоны взаимодействия соседних компонентов»?

Синхронизируйте два соседних компонента через общее состояние родителя и props с функциями обратного вызова Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Шаблоны взаимодействия соседних компонентов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Подъём состояния: принципы и примеры
  2. Проброс props: когда он мешает, а когда уместен
  3. Шаблоны взаимодействия соседних компонентов
  4. Выбор подходящего места для состояния
← Назад к React Academy