Выбор ответа Middle Навигация спрашивают часто обновлено

React Navigation: обновить данные при возврате на экран

Вопрос

Пользователь вернулся на список после редактирования, а useEffect(() => load(), []) не сработал. Почему и что использовать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Экран в стеке не размонтируется, эффект не повторится; нужен useFocusEffect. В стеке предыдущие экраны остаются смонтированными ради быстрого возврата и сохранения состояния.

Варианты ответа

  1. Экран в стеке не размонтируется, эффект не повторится; нужен useFocusEffectправильный ответ
  2. Нужно добавить navigation в зависимости useEffect, тогда он перезапустится
  3. useEffect в React Native вызывается только при первом запуске приложения
  4. Нужно вызвать navigation.reset при возврате, чтобы экран смонтировался заново

Разбор

В стеке предыдущие экраны остаются смонтированными ради быстрого возврата и сохранения состояния. Эффект с пустыми зависимостями выполнится один раз при монтировании. useFocusEffect вызывается при каждом получении фокуса и чистит за собой при потере фокуса. Добавление navigation в зависимости ничего не даст (объект стабилен), reset уничтожит историю. С TanStack Query достаточно refetchOnFocus через focusManager.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.