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 — это мощный инструмент для управления состоянием, основанный на строгих принципах однонаправленного потока данных. Он особенно полезен в больших приложениях, где важно поддерживать предсказуемость и согласованность состояния.