Вопрос с собеседования · Frontend
Когда использовать useReducer вместо useState?
MiddleReact
Ещё спрашивают так:
- Что такое reducer в React?
Коротко
useReducer(reducer, initial) хранит состояние, которое меняется через действия: dispatch({type: "added", item}), а чистая функция reducer(state, action) возвращает новое состояние. Подходит, когда полей много и они меняются вместе, переходы зависят от предыдущего состояния, логику хочется тестировать отдельно от компонента. dispatch стабилен — его удобно передавать вниз через контекст.
- Reducer чистый: без запросов, таймеров и мутаций
- useState проще для независимых значений
- Тот же подход в Redux, но без глобального хранилища
А ещё Состояние формы мастера из нескольких шагов — типичный кандидат
Подробно
function reducer(s: Cart, a: Action): Cart {
switch (a.type) {
case "add": return { ...s, items: [...s.items, a.item] };
case "clear": return { ...s, items: [] };
}
}
const [cart, dispatch] = useReducer(reducer, { items: [] });Что хотят услышать
- Действия и чистый reducer.
- Когда лучше useState.
- Тестируемость и стабильный dispatch.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Reducer может делать запросы к серверу внутри и сам вызывать dispatch по ответу
- ✓Когда много связанных полей и переходов: чистый reducer легко тестировать
- ✗useReducer всегда лучше useState
- ✗useReducer создаёт глобальное хранилище для всего приложения, как Redux
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.