📜  Redux 形式 (1)

📅  最后修改于: 2023-12-03 15:34:42.220000             🧑  作者: Mango

Redux 形式介绍

Redux 是一个流行的 JavaScript 应用程序状态管理库。它允许我们创建一个可预测的、可测试的和可扩展的应用程序。Redux 广泛用于处理大型和复杂的 Web 应用程序中的状态管理。

Redux 的基本架构

Redux 的基本架构包括三个主要部分 - Action、Reducer 和 Store。

Action

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

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

Store 是应用程序的单一状态容器。它存储了应用程序的完整状态,并公开了一组 API,用于访问状态、派发 Action 和订阅状态更改。

// Store 示例
import { createStore } from 'redux';

const store = createStore(todosReducer);
Redux 的工作流程

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 的优势:

  • 提供了一个可预测的、可测试的和可扩展的状态管理解决方案。
  • 可以使应用程序状态的变化可预测和可控。
  • 通过单一的状态容器,可以使状态在整个应用程序中保持一致。

Redux 的劣势:

  • 需要使用一些附加的工具和代码来实现,这使代码量和复杂度增加了。
  • 在某些情况下,Redux 可以过度被使用,增加了复杂性和错误率。