Вопрос с собеседования · Frontend
Как создать хранилище Zustand и подписаться на его часть?
JuniorReact
Ещё спрашивают так:
- Чем Zustand проще Redux?
Коротко
create создаёт хук-хранилище: состояние и функции изменения в одном объекте, без провайдера. Компонент подписывается селектором — useCart(s => s.items.length) — и перерисовывается, только когда выбранная часть изменилась. Изменения — через set, неизменяемо (или с middleware immer). Подходит для клиентского глобального состояния: корзина, настройки интерфейса, черновики. Серверные данные лучше держать в TanStack Query.
- Селектор, возвращающий новый объект, вызывает лишние рендеры — useShallow
- persist middleware — сохранение в localStorage
- Хранилищ можно сделать несколько по областям
А ещё Без селектора компонент подписывается на всё хранилище
Подробно
const useCart = create<CartState>()(set => ({
items: [],
add: item => set(s => ({ items: [...s.items, item] })),
clear: () => set({ items: [] }),
}));
const count = useCart(s => s.items.length);
const add = useCart(s => s.add);Что хотят услышать
- create без провайдера.
- Подписка селектором.
- Неизменяемые обновления через set.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓create даёт хук-хранилище; селектор перерисовывает только при смене выбранной части
- ✗Zustand требует оборачивать всё приложение в Provider, как Redux и обычный React Context
- ✗Компонент с селектором перерисовывается при любом изменении хранилища, а не только своей части
- ✗Zustand предназначен только для серверных данных и полностью заменяет собой TanStack Query
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.