Redux Toolkit или Zustand
Вопрос
Чем Redux Toolkit отличается от Zustand, и что бы ты выбрал для нового проекта?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Оба внешние сторы с подпиской через селекторы, перерисовка только при изменении среза
RTK: единый стор, экшены и редьюсеры, Immer, DevTools с историей, middleware, RTK Query
Zustand: стор как хук, без провайдера и бойлерплейта, минимальный API
RTK оправдан в большой команде и сложной доменной логике, где важны предсказуемость и трассировка
Zustand хорош для небольшого и среднего клиентского состояния
Серверные данные в обоих случаях лучше вынести в Query-библиотеку
Что могут спросить следом
- Как в Zustand избежать лишних перерисовок при выборе нескольких полей?
- Что такое middleware в Redux и для чего он?
- Зачем RTK использует Immer?
Разбор
Оба решения держат состояние вне React и дают компоненту подписаться на срез через селектор, поэтому перерисовка точечная. Разница в философии.
Redux Toolkit это единый стор, где изменения идут только через экшены и чистые редьюсеры. createSlice убрал бойлерплейт, внутри редьюсера можно писать мутирующий код благодаря Immer. Плюсы: строгая предсказуемость, DevTools с историей экшенов, middleware для логирования и побочных эффектов, RTK Query для серверных данных. Это хорошо масштабируется на большую команду.
Zustand это стор-хук без провайдера: create возвращает хук, в нём состояние и функции. Очень мало кода, легко начать. Нужно аккуратно писать селекторы: если возвращать объект, нужен useShallow.
Для нового проекта я бы сначала вынес серверные данные в TanStack Query. Часто после этого клиентского состояния остаётся мало, и хватает Zustand или даже Context. RTK выбрал бы, если доменная логика сложная, команда большая и нужна строгая трассировка изменений.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.