📅  最后修改于: 2023-12-03 15:34:42.220000             🧑  作者: Mango
Redux 是一个流行的 JavaScript 应用程序状态管理库。它允许我们创建一个可预测的、可测试的和可扩展的应用程序。Redux 广泛用于处理大型和复杂的 Web 应用程序中的状态管理。
Redux 的基本架构包括三个主要部分 - Action、Reducer 和 Store。
Action 是描述一个发生事件的对象。Action 还包括一个类型和一个可选的有效负载。例如,当用户在应用程序中点击一个按钮时,可以触发一个 Action,该 Action 包含按钮的类型和要应用的更改。
// Action 示例
const ADD_TODO = 'ADD_TODO';
const REMOVE_TODO = 'REMOVE_TODO';
// Action 创建函数
function addTodo(text) {
return {
type: ADD_TODO,
payload: {
text
}
}
}
function removeTodo(id) {
return {
type: REMOVE_TODO,
payload: {
id
}
}
}
Reducer 是应用程序中负责处理 Action 的纯函数。Reducer 接收当前状态和要处理的 Action 作为输入,并返回新的状态。Reducer 使得应用程序状态的变化可预测和可控。
// Reducer 示例
const initialState = {
todos: []
};
function todosReducer(state = initialState, action) {
switch(action.type) {
case ADD_TODO: {
return {
...state,
todos: [
...state.todos,
{
text: action.payload.text,
completed: false
}
]
};
}
case REMOVE_TODO: {
return {
...state,
todos: state.todos.filter(todo => todo.id !== action.payload.id)
};
}
default:
return state;
}
}
Store 是应用程序的单一状态容器。它存储了应用程序的完整状态,并公开了一组 API,用于访问状态、派发 Action 和订阅状态更改。
// Store 示例
import { createStore } from 'redux';
const store = createStore(todosReducer);
Redux 的工作流程是基于单向数据流。当用户执行操作时,例如点击一个按钮,在应用程序中的某个组件中派发 Action。然后,Redux Store 使用 Reducer 处理 Action,计算出新状态。组件随着 Store 中状态的更新而重新渲染。
// Redux 的工作流程
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import todosReducer from './reducers/todosReducer';
import App from './components/App';
const store = createStore(todosReducer);
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
Redux 的优势:
Redux 的劣势: