如何用简单的方式理解 Redux

阅读时长 7 分钟读完

Redux 是一个 JavaScript 应用程序状态管理库,它可以管理整个应用程序的状态,避免了单向数据流的过长问题。在 React 开发环境中,Redux 可以与 React 建立起很好的配合来进行状态管理。本篇文章将用简单易懂的方式,带你从容入门 Redux。

Redux 实现过程

Redux 最基本的实现过程可以用下图来概括:

-- -------------------- ---- -------
       -----------------------
       -                     -
       -                     -
   ---------           -------------
   -  ---- -   -----   -   -----   -
   ---------           -------------
       -                     -
       -                     -
       -----------------------
                  -
                  -
             ----------
             - ------ -
             ----------
展开代码

从图中可以看出,Redux 的基本实现过程可以分为三个部分:

  1. View:用户界面,就是最终呈现给用户的 UI 。

  2. Redux:状态管理,主要负责响应和处理用户界面发出的请求,同步和异步请求会进入相应的中间件进行处理,最终改变该应用程序的状态。

  3. Server:数据层,主要负责获取数据的逻辑。

Redux 工作原理

Redux 通过一下三个重要的概念来管理应用程序的状态,分别是:

  1. Store:负责管理整个应用程序的状态,是一个包含状态、状态修改方法和状态订阅方法的对象。

  2. Action:一个简单的 JavaScript 对象,其描述应用程序中的事件。

其中 type 属性是描述事件类型的,payload 属性则是描述事件所携带的一些数据信息。

  1. Reducer:状态修改方法,将旧的状态作为输入,生成新的状态作为输出。
-- -------------------- ---- -------
-------- ----------- - --- ------- -
    ------ ------------- -
        ---- -----------
            ------ -
                ---------
                -
                    --- ------------------
                    ----- -------------------
                -
            -
        --------
            ------ -----
    -
-
展开代码

整个 Redux 工作流程的图示可以用下图来概括:

-- -------------------- ---- -------
         -----------------------------------------
         -                                       -
         -                                       -
-----------------                           ----------
-  ------       -                           - -----  -
-----------------                           ----------
-               -   -- ------  -              -        -
- ------------- - ----------- -              - ------ -
- - ----      - -             -              - -    - -
- - -------   - -             -              - -    - -
- ------------- -             - -- --------  - ------- -
-               -   -----------  ---------- - - ---- - -
-----------------             -              - -    - -
                               -              - -    - -
                               -              - ------ -
                               -              -        -
                               -              ----------
                               -
                               - -- ------ --- -------
                               -
                           ------------
                           -  ----    -
                           ------------
展开代码

Redux 工作的基本流程如下:

  1. View 向 Store 分发 Action。

  2. Store 接收并处理 Action。

  3. Store 通过 Reducer 将旧状态转换成新状态并返回。

  4. Store 将新状态传递给 View。

示例代码

我们可以通过下面这个简单的待办事项示例来简单地理解 Redux:

-- -------------------- ---- -------
------ - ----------- - ---- -------

-- -- ------ --
----- -------- - ----------

-- -- ------ --
-------- ------- ------ -
  ------ -
    ----- ---------
    ----- ----
  -
-

-- -- ------- --
-------- ----- ------ - --- ------- -
  ------ ------------- -
    ---- ---------
      ------ ---------- ------------
    --------
      ------ -----
  -
-

-- -- -----
----- ----- - ------------------

-- ------
-----------------------------

-- -- ----- --
------------------ -- ------------------------------

-- -- --------- -----
------------------------
  --- --
  ----- --------
  ----- -----
---

-- -- --------- -----
------------------------
  --- --
  ----- --------
  ----- ----
---
展开代码

这个例子的功能很简单,定义了一些常量用来确定我们要做什么,例如添加 Todo 时必须使用 ADD_TODO 常量。定义了 Action 函数 addTodo,该函数将一个带有 “todo” 属性的 JavaScript 对象作为参数,最终返回一个带有 ADD_TODO 标识符和 “todo” 属性的对象。

上面代码中的 Reducer 函数 todos 对 Action 的处理逻辑非常简单,它仅根据 Action 的类型来确定将要如何处理状态。

最后,我们定义了 Store 对象,并通过 createStore 函数创建。然后我们分别通过 dispatch 函数分发两个 Action 请求,最终我们通过 getState 函数获得了状态的最新值。

Redux 能够在应用程序发生复杂运动时提供可预测性的状态管理。理解它的基本概念和实现过程是学习 React 和 Node.js 的一个重要部分。虽然如此,但我们应该认识到,没有单一的、完美的状态管理解决方案。根据不同的需求,应选择不同的解决方案。在实践中,我们经常会混合应用不同的工具来实现简单、快速、动态的 React 和 Node.js 开发。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67ca6445e46428fe9e27f1d8

纠错
反馈

纠错反馈