Вопрос с собеседования · 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 минут бесплатно.

Разбор собеседования