Минимальный стор
Условие
createStore(reducer, initial): getState, dispatch, subscribe (возвращает отписку). Подписчики вызываются после изменения состояния; отписка во время рассылки не должна ломать обход.
Что проверяют тесты
хранит и меняет состояние
уведомляет подписчиков
отписка работает
отписка во время рассылки не ломает обход
подписчик видит новое состояние
Как подойти
Ядро Redux в двадцати строках. Три инварианта: редьюсер чистый и возвращает новое состояние; рассылка идёт после обновления, чтобы getState внутри подписчика уже видел новое; обход по копии массива, иначе отписка во время рассылки сдвинет индексы и пропустит соседа. Отписка через filter, а не splice по индексу - индекс к моменту вызова может устареть.
Подсказки: 3
- Состояние заменяется результатом редьюсера, а не мутируется.
- Подписчики вызываются после присваивания нового состояния.
- Обходи копию списка подписчиков - любой из них может отписаться прямо в колбэке.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.