Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: state

Что произойдет с дочерним компонентом, если поменяется key у родительского компонента?

Этот вопрос проверяет глубокое понимание механизма согласования (reconciliation) в React и роли ключа (key) в этом процессе.

Короткий ответ

При изменении key у родительского компонента React интерпретирует это как то, что это совершенно новый компонент. Старый экземпляр компонента и все его дочерние элементы будут полностью размонтированы (вызовутся функции очистки в useEffect), а затем будет смонтирован совершенно новый экземпляр с чистым состоянием. Это мощный инструмент для принудительного сброса состояния компонента.

Длинный ответ

Ключ (key) — это специальный проп, который помогает React определять, какие элементы изменились, добавились или удалились в списке. Он также играет роль в идентификации компонентов.

Процесс при изменении key

Когда React встречает компонент с изменившимся key, он запускает следующий процесс:

  1. Размонтирование:

    • React полностью уничтожает текущий экземпляр компонента и всех его потомков.

    • Выполняются функции очистки во всех useEffect хуках (возвращаемое значение из useEffect).

    • Локальное состояние компонента (созданное через useState, useRef) безвозвратно теряется.

  2. Монтирование:

    • React создает совершенно новый экземпляр компонента "с чистого листа".

    • Инициализируется новое, начальное состояние.

    • Выполняется рендер компонента и всех его дочерних элементов.

    • Вызываются хуки useEffect после монтирования.

Практический пример

Представьте компонент счетчика, состояние которого нужно сбросить при переключении пользователя.

// UserProfile получает разных пользователей и key, равный user.id
function UserProfile({ user }) {
  const [messageCount, setMessageCount] = useState(0);

  useEffect(() => {
    // Эффект для загрузки данных пользователя
    console.log('Монтирование или обновление UserProfile для', user.name);
    return () => {
      console.log('Размонтирование UserProfile для', user.name); // Очистка
    };
  }, [user.name]);

  return (
    <div>
      <h2>{user.name}</h2>
      <p>Сообщений: {messageCount}</p>
      <button onClick={() => setMessageCount(c => c + 1)}>+1</button>
    </div>
  );
}

// Использование:
// <UserProfile key={currentUser.id} user={currentUser} />
  • Если currentUser меняется с {id: 1, name: 'Alice'} на {id: 2, name: 'Bob'}, то key меняется с 1 на 2.

  • Компонент для Alice размонтируется (состояние messageCount сбросится, выполнится cleanup в useEffect), а затем смонтируется новый компонент для Bob с messageCount = 0.

Вывод

Изменение key — это сигнал React о том, что элемент/компонент нужно рассматривать как новый, что приводит к полному пересозданию его и всех дочерних элементов. Это полезно для принудительного сброса внутреннего состояния или перезапуска побочных эффектов.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • React

    React

Ключевые слова

#state

Подпишись на React Developer в телеграм