Redux — это предсказуемый контейнер состояния (state container) для JavaScript-приложений, чаще всего используемый с React. Он помогает централизованно управлять состоянием приложения, делая его поведение предсказуемым и удобным для отладки.
Single Source of Truth (Единственный источник истины)
Состояние всего приложения хранится в одном объекте — store
(хранилище). Это упрощает отладку и сериализацию состояния.
State is Read-Only (Состояние только для чтения)
Изменять состояние можно только через отправку actions
(действий) — простых объектов, описывающих, что произошло.
Changes are Made with Pure Reducers (Изменения через чистые редюсеры)
Функции-редюсеры (reducers) принимают предыдущее состояние и action, возвращают новое состояние. Они должны быть "чистыми" (без side effects).
const store = createStore(rootReducer);
Единственный объект, который:
getState()
dispatch(action)
subscribe(listener)
{
type: 'ADD_TODO',
payload: 'Learn Redux'
}
Простые объекты, которые описывают, что произошло. Должны иметь поле type
и могут содержать дополнительные данные (обычно в payload
).
function todosReducer(state = [], action) {
switch (action.type) {
case 'ADD_TODO':
return [...state, action.payload];
default:
return state;
}
}
Чистые функции, которые:
store.dispatch({ type: 'INCREMENT' });
Метод store для отправки actions. Это единственный способ изменить состояние.
const logger = store => next => action => {
console.log('dispatching', action);
return next(action);
};
Позволяют расширить функциональность Redux. Популярные middleware:
redux-thunk
для асинхронных действийredux-saga
для сложных side effectsredux-logger
для логирования<Provider store={store}>
<App />
</Provider>
Используется react-redux
для связки:
Provider
делает store доступным для всех компонентовuseSelector
для чтения состоянияuseDispatch
для отправки actionsRedux — это мощный инструмент для управления состоянием, основанный на строгих принципах однонаправленного потока данных. Он особенно полезен в больших приложениях, где важно поддерживать предсказуемость и согласованность состояния.