Redux — это библиотека для управления состоянием (state management), которую можно интегрировать с React. Вот пошаговая инструкция:
Сначала установите Redux и React-Redux (официальная библиотека для связки React и Redux):
npm install redux react-redux
Хранилище (store) — это централизованное место для хранения состояния приложения.
// store.js
import { createStore } from 'redux';
import rootReducer from './reducers';
const store = createStore(rootReducer);
export default store;
Редюсер (reducer) — это чистая функция, которая определяет, как состояние изменяется в ответ на действия (actions).
// reducers/index.js
import { combineReducers } from 'redux';
import todosReducer from './todos';
const rootReducer = combineReducers({
todos: todosReducer,
// другие редюсеры можно добавить здесь
});
export default rootReducer;
Используйте компонент <Provider>
из react-redux, чтобы сделать хранилище доступным во всем приложении.
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import App from './App';
import store from './store';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
Для доступа к состоянию и диспетчеризации действий используйте хуки useSelector
и useDispatch
.
// TodoList.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { addTodo } from './actions';
const TodoList = () => {
const todos = useSelector(state => state.todos);
const dispatch = useDispatch();
return (
<div>
{todos.map(todo => (
<div key={todo.id}>{todo.text}</div>
))}
<button onClick={() => dispatch(addTodo('New Todo'))}>
Add Todo
</button>
</div>
);
};
export default TodoList;
Действия (actions) — это объекты, которые описывают, что произошло в приложении.
// actions.js
export const ADD_TODO = 'ADD_TODO';
export const addTodo = (text) => ({
type: ADD_TODO,
payload: { text, id: Date.now() }
});
Редюсер обрабатывает действия и возвращает новое состояние.
// reducers/todos.js
import { ADD_TODO } from '../actions';
const initialState = [];
const todosReducer = (state = initialState, action) => {
switch (action.type) {
case ADD_TODO:
return [...state, action.payload];
default:
return state;
}
};
export default todosReducer;
Это основная схема подключения Redux к React приложению. Для больших приложений можно добавить middleware (промежуточное ПО) типа redux-thunk или redux-saga для обработки асинхронных операций.