Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Redux: composition, reducer

Если у нас 100 редюсеров, проверяет ли их все rootReducer или только до первого совпадения по типу?

Этот вопрос проверяет понимание механизма работы combineReducers и обработки экшенов в дереве редюсеров.

Короткий ответ

rootReducer передает каждый экшен ВСЕМ дочерним редюсерам, независимо от количества редюсеров и совпадения по типу экшена. Каждый редюсер получает экшен и решает самостоятельно, нужно ли ему обновлять состояние. В switch/case default ветка возвращает текущее состояние без изменений.

Длинный ответ

В Redux используется паттерн, при котором экшены рассылаются всем редюсерам, а не обрабатываются по принципу первого совпадения.

Механизм combineReducers:

Создание корневого редюсера:

  • combineReducers создает функцию, которая вызывает каждый дочерний редюсер

  • Каждый редюсер получает ту же самую копию экшена

  • Редюсеры работают независимо друг от друга

Пример структуры:

const userReducer = (state = {}, action) => {
  switch (action.type) {
    case 'USER_UPDATE':
      return { ...state, ...action.payload };
    default:
      return state; // Неизмененное состояние для других экшенов
  }
};

const postsReducer = (state = [], action) => {
  switch (action.type) {
    case 'POST_ADD':
      return [...state, action.payload];
    default:
      return state; // Неизмененное состояние для других экшенов
  }
};

const rootReducer = combineReducers({
  user: userReducer,
  posts: postsReducer
});

Обработка экшена:

Для экшена USER_UPDATE:

  • userReducer обрабатывает экшен и возвращает новое состояние

  • postsReducer получает тот же экшен, но возвращает текущее состояние (default case)

  • Корневой редюсер комбинирует результаты

Для экшена POST_ADD:

  • userReducer возвращает текущее состояние (default case)

  • postsReducer обрабатывает экшен и возвращает новое состояние

Преимущества подхода:

Гибкость:

  • Несколько редюсеров могут реагировать на один тип экшена

  • Легко добавлять новую функциональность без изменения существующих редюсеров

  • Предсказуемость поведения системы

Производительность:

  • Redux оптимизирован для быстрого прохождения по всем редюсерам

  • Большинство редюсеров быстро возвращают state в default case

  • В продакшене используются различные оптимизации

Рекомендации:

  • Держать редюсеры простыми и focused на своей области

  • Использовать default case для возврата неизмененного состояния

  • Избегать сложной логики в редюсерах

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Redux

    Redux

Ключевые слова

#composition

#reducer

Подпишись на React Developer в телеграм