Выбор ответа Middle Context и стейт-менеджеры обновлено

Зачем делить контекст на данные и действия

Вопрос

Команда разделила один контекст на TodosStateContext (список) и TodosDispatchContext (функция dispatch из useReducer). Что это даёт?

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

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

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

Коротко

Правильный ответ: Кому нужен лишь dispatch, не рендерятся от списка. dispatch из useReducer имеет стабильную идентичность на всё время жизни компонента.

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

  1. Кому нужен лишь dispatch, не рендерятся от спискаправильный ответ
  2. Список начинает обновляться синхронно, без батчинга
  3. React перестаёт перерисовывать потребителей списка
  4. Это нужно для совместимости с Redux DevTools

Разбор

dispatch из useReducer имеет стабильную идентичность на всё время жизни компонента. Если положить его в отдельный контекст, значение этого контекста никогда не меняется, и кнопки «добавить» или «удалить», которые только отправляют экшены, не перерисовываются при каждом изменении списка.

  • Синхронность обновлений от разделения не меняется.
  • Потребители списка по-прежнему перерисуются при его изменении, это и нужно.
  • DevTools тут ни при чём.

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

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

Термины по теме