Используется ли один большой стор или много маленьких в приложении
Что проверяют
Умеете ли вы объяснить устройство состояния в своём приложении и почему оно такое, а не просто назвать библиотеку. Следом обычно спрашивают, где у вас живут данные с сервера и как вы боретесь с лишними перерисовками.
Как отвечать
Начните с разделения состояния по видам, это снимает половину спора:
- серверное: кэш данных с API. Его лучше отдать TanStack Query или RTK Query, они сами решают загрузку, повторные запросы и инвалидацию;
- глобальное клиентское: пользователь, тема, корзина, настройки, нужные многим экранам;
- локальное: открыт ли попап, значение поля. Ему место в
useStateили в форме (React Hook Form), а не в сторе; - URL: фильтры и пагинация, которые должны переживать перезагрузку и копирование ссылки.
После этого выбор между одним и многими сторами касается только глобального клиентского состояния. Redux устроен как один стор, разбитый на слайсы через createSlice в Redux Toolkit. Плюсы: одно место для DevTools и time travel, middleware для побочных эффектов, простые связи между слайсами. Zustand, MobX и Pinia во Vue естественно дают несколько сторов по доменам: меньше шаблонного кода, стор подгружается вместе со своим экраном.
Про производительность скажите точно: в Redux перерисовка зависит не от размера стора, а от селекторов. useSelector перерисует компонент, только если выбранное значение изменилось по ссылке, а производные данные мемоизируют через createSelector.
И обязательно ответьте за свой проект: что используется, почему так решили и что бы поменяли.
Где спотыкаются
Называют React Context «маленькими сторами для производительности». Context не менеджер состояния: при смене значения перерисовываются все его потребители.
Кладут ответы API в глобальный стор с ручными флагами isLoading и держат одного и того же пользователя в двух сторах, после чего копии расходятся.
Забывают про SSR. Стор, созданный на уровне модуля, в Next.js общий для всех запросов на сервере, и данные одного пользователя утекают в страницу другого. Стор нужно создавать на каждый запрос.