В каких случаях использовать useState и Redux и почему
Что проверяют
Не тянете ли вы Redux рефлекторно в каждый проект и понимаете ли, чем локальное состояние отличается от общего. Заодно смотрят, знаете ли вы, как управление состоянием выглядит сейчас, а не пять лет назад.
Как отвечать
useState для состояния, которое живёт внутри компонента и умирает вместе с ним: открыт ли модал, текст в поле, активная вкладка, раскрытый аккордеон. Понадобилось соседу, состояние поднимается на общего родителя, и очень часто этого уже достаточно.
Redux берут, когда состояние действительно разделяется между далёкими частями приложения и важна предсказуемость переходов: сессия и права, корзина, фильтры каталога, очередь офлайн-действий. Выигрыш там не в скорости, а в отладке: история действий в devtools, воспроизводимый сценарий, middleware на побочные эффекты.
Обязательно разделите клиентское состояние и серверные данные. Ответы API это кеш, и для него берут TanStack Query или RTK Query: нужны инвалидация, статусы загрузки, дедупликация запросов, а не рукописный редьюсер на каждый эндпоинт. Половина старых сторов существовала ровно ради этого.
Про контекст скажите отдельно: это транспорт, а не хранилище. Он убирает прокидывание пропсов через пять уровней, но смена значения перерисовывает всех потребителей.
Redux сегодня пишут на Redux Toolkit, а не на константах и switch:
const filters = createSlice({
name: "filters",
initialState: { query: "", page: 1 },
reducers: {
setQuery: (s, a) => { s.query = a.payload; s.page = 1; },
},
});Где спотыкаются
Кладут в общий стор всё подряд, включая значения полей формы. Каждое нажатие клавиши идёт через диспетчер, подписчики перерисовываются, а форма по смыслу всё равно остаётся локальной.
Называют Redux способом ускорить приложение. Скорее наоборот: селектор без мемоизации, возвращающий новый объект или массив, даёт лишние рендеры на каждое изменение стора.
Знают ровно две опции. Между локальным хуком и Redux есть useReducer, Zustand, Jotai, MobX, и ответ без них звучит как знание одного стека.