Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Redux: store, dispatch, reducer, state

Как выглядит типичный поток данных в приложении React с Redux?

Этот вопрос проверяет знание, как данные передаются и обновляются в приложении с Redux.

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

Поток данных в Redux односторонний. Компоненты вызывают действия (actions), которые передаются в редьюсеры (reducers) через хранилище (store). Редьюсеры обновляют состояние, и компоненты получают обновления через подписки.

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

Поток данных в Redux представляет собой одностороннюю архитектуру, что делает его простым и предсказуемым. Вот типичный цикл:

  • Действие (Action):
    Компонент инициирует действие — объект, описывающий, что должно произойти. Например:

    const incrementAction = { type: 'INCREMENT' };
  • Отправка действия (Dispatch):
    Действие передается в хранилище (store) с помощью метода dispatch:

    store.dispatch(incrementAction);
  • Редьюсер (Reducer):
    Хранилище передает действие в редьюсеры, которые принимают текущее состояние и действие и возвращают новое состояние:

    function counterReducer(state = 0, action) {
    	switch (action.type) {
    		case 'INCREMENT':
    			return state + 1;
    		default:
    			return state;
    	}
    }
  • Обновление состояния:
    Хранилище сохраняет новое состояние и уведомляет подписанные компоненты о его изменении.

  • Отображение в компоненте:
    Компоненты, подписанные на состояние через useSelector или connect, получают новое значение и перерисовываются:

    const count = useSelector((state) => state.count);

Пример полного цикла:

import { createStore } from 'redux';
import { Provider, useDispatch, useSelector } from 'react-redux';
// Редьюсер
function counterReducer(state = 0, action) {
	switch (action.type) {
		case 'INCREMENT':
			return state + 1;
		case 'DECREMENT':
			return state - 1;
		default:
			return state;
	}
}
// Хранилище
const store = createStore(counterReducer);
// Компоненты
function Counter() {
	const count = useSelector((state) => state);
	const dispatch = useDispatch();
	return (
		<div>
			<p>Count: {count}</p>
			<button onClick={() => dispatch({ type: 'INCREMENT' })}>Increment</button>
			<button onClick={() => dispatch({ type: 'DECREMENT' })}>Decrement</button>
		</div>
	);
}
// Приложение
function App() {
	return (
		<Provider store={store}>
			<Counter />
		</Provider>
	);
}

Такая односторонняя структура упрощает понимание потока данных и позволяет избежать запутанных взаимосвязей между компонентами. Она также делает Redux удобным для работы в больших командах.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • Redux

    Redux

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

#store

#dispatch

#reducer

#state

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