Redux 基础教程 —— 从入门到实战

阅读时长 11 分钟读完

什么是 Redux?

Redux 是一个 JavaScript 应用程序的状态管理库。它可以让我们预测应用程序的行为,使得代码更容易理解和维护。Redux 是一个非常受欢迎的 JavaScript 库,它被广泛使用在许多不同的应用程序中。

Redux 主要有三个核心原则:

  • 单一数据源:应用程序状态存储在一个对象中,称为 Store。
  • 状态只读:当我们想要更改应用程序的状态时,我们必须通过一个 action 创建一个新的状态。
  • 状态更改通过纯函数完成:我们使用纯函数(reducers)来处理状态更新。reducers 接收旧的状态和一个 action,返回一个新的状态。

在 Redux 中,我们使用 Store 来存储应用程序的全局状态。当我们想要在应用程序中更改状态时,我们必须使用一个 action 来描述这个更改。这个 action 是一个简单的对象,它至少包含一个 type 属性和一些附加数据。当我们分发(dispatch)一个 action 时,Redux 会将其发送给我们的 reducers 来创建新的应用程序状态。reducers 是纯函数,它们接收旧的状态和一个 action,然后返回一个新的状态。

Redux 基础概念

Store

Store 是 Redux 中最重要的概念之一。它是存储整个应用程序状态的地方。我们使用 createStore() 函数来创建 Store。

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

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

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

在上面的代码中,我们创建了一个 reducer 函数来处理状态更新。我们创建了一个简单的 Store,它的初始状态是一个空对象。我们还传递了 reducer 函数给 createStore() 函数来创建 Store。

Action

Action 是 Redux 中描述状态更改的对象。它只是一个简单的 JavaScript 对象,它至少包含一个 type 属性和一些附加数据。当我们分发一个 action 时,它被发送给我们的 reducers 来创建新的应用程序状态。

在上面的代码中,我们创建了一个 addItem() action 创建函数,它会返回一个 action 对象。然后我们使用 store.dispatch() 函数来将 action 分发给 reducers 以更新应用程序状态。

Reducer

Reducer 是 Redux 中处理状态更新的函数。它接收旧的状态和一个 action,然后返回一个新的状态。Reducer 必须是一个纯函数,它不应该改变输入参数,也不应该有任何副作用。

在上面的代码中,我们创建了一个 reducer 函数来处理 ADD_ITEM action。如果 action.type 是 ADD_ITEM,我们将创建一个新的状态对象,它是通过将 action.payload 添加到现有 items 数组中创建的。否则,我们返回当前的状态。

Redux 工作流程

Redux 的工作流程可以分为三个步骤:

  1. 创建一个 action。
  2. 将 action 分发给 reducers。
  3. reducers 返回新的状态。

创建一个 action

我们使用 action 创建函数来创建一个 action。这个函数必须返回一个描述 action 的对象。

在上面的代码中,我们创建了一个 addItem() action 创建函数,它会返回一个 action 对象。

分发 action

我们使用 store.dispatch() 函数来分发 action,它将 action 发送给我们的 reducers。

在上面的代码中,我们将一个 ADD_ITEM action 发送给 reducers。

reducers 返回新的状态

reducers 接收旧的状态和一个 action,然后返回一个新的状态。reducers 必须是纯函数,它不应该改变输入参数,也不应该有任何副作用。

在上面的代码中,我们创建了一个 reducer 函数来处理 ADD_ITEM action。如果 action.type 是 ADD_ITEM,我们将创建一个新的状态对象,它是通过将 action.payload 添加到现有 items 数组中创建的。否则,我们返回当前的状态。

Redux 实战

在本节中,我们将使用 Redux 构建一个简单的应用程序来添加和删除项目。

安装

在开始实战之前,我们需要安装 Redux:

创建 Store 和 Reducers

我们需要创建 Store 和 Reducer。在我们的应用程序中,我们只有一个 reducer(itemsReducer),它将处理 ADD_ITEM 和 REMOVE_ITEM action。我们还需要为 Store 创建一个初始状态,我们将在这个状态对象中存储我们的项目。

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

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

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

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

在上面的代码中,我们创建了一个初始状态为 items 数组为空的 initialState 对象,我们还创建了一个 itemsReducer 函数来处理 ADD_ITEM 和 REMOVE_ITEM action。

创建 Action

我们需要创建两个 action,ADD_ITEM 和 REMOVE_ITEM。

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

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

在上面的代码中,我们创建了两个 action,ADD_ITEM 和 REMOVE_ITEM。ADD_ITEM action 接收一个项目对象并分配一个随机的 id。REMOVE_ITEM 接收一个项目的 id。

创建 Reducer

我们需要创建一个 reducer 来处理 ADD_ITEM 和 REMOVE_ITEM action。

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

在上面的代码中,我们创建了一个 itemsReducer 函数来处理 ADD_ITEM 和 REMOVE_ITEM action。ADD_ITEM action 将项目添加到状态数组中。REMOVE_ITEM action 将 id 在数组中匹配的项目删除。

创建视图

我们将创建一个简单的 React 视图来显示我们的项目列表和输入框。

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

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

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

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

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

在上面的代码中,我们使用 useSelector 钩子从 Store 获取 items 数组。我们还使用 useDispatch 钩子获取分发 action 的函数。我们创建了一个 handleAddItem 函数来添加项目,并清空文本框。在项列表中,我们使用 map 函数来遍历项目数组,然后使用 removeTodo 函数从 Store 中删除项目。

入口文件

我们在入口文件中创建了一个 Store 并使用 Provider 组件将其绑定到 React 应用程序。

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

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

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

在上面的代码中,我们创建了一个 Store 并传递给 Provider 组件。TodoList 组件将有访问 Store 和 dispatch 函数的能力。

结论

在本文中,我们介绍了 Redux 的基础知识,包括 Store、Action 和 Reducer。我们还通过实战演示了如何使用 Redux 构建一个简单的应用程序。希望读者可以从本文中获得 Redux 的入门知识,然后开始学习更高级的 Redux 技术。

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

纠错
反馈