Код Senior Реализация с нуля обновлено

Минимальный стор

Условие

createStore(reducer, initial): getState, dispatch, subscribe (возвращает отписку). Подписчики вызываются после изменения состояния; отписка во время рассылки не должна ломать обход.

Что проверяют тесты

  • хранит и меняет состояние

  • уведомляет подписчиков

  • отписка работает

  • отписка во время рассылки не ломает обход

  • подписчик видит новое состояние

Как подойти

Ядро Redux в двадцати строках. Три инварианта: редьюсер чистый и возвращает новое состояние; рассылка идёт после обновления, чтобы getState внутри подписчика уже видел новое; обход по копии массива, иначе отписка во время рассылки сдвинет индексы и пропустит соседа. Отписка через filter, а не splice по индексу - индекс к моменту вызова может устареть.

Подсказки: 3
  1. Состояние заменяется результатом редьюсера, а не мутируется.
  2. Подписчики вызываются после присваивания нового состояния.
  3. Обходи копию списка подписчиков - любой из них может отписаться прямо в колбэке.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.