Redux-thunk 连写实例详解

阅读时长 7 分钟读完

在前端开发中,Redux 是一个非常流行的应用程序状态管理工具,它可以让我们更好地管理和控制我们的应用程序状态。而 Redux-thunk 则是 Redux 的一个中间件,它可以让我们处理异步操作,并在数据请求成功后更新 Redux 状态,从而实现更为顺畅的用户体验。

在本文中,我们将深入探讨 Redux-thunk 的使用方法,并结合实例进行详细说明,以帮助你更好地掌握 Redux-thunk 以及 React 中的状态管理。

什么是 Redux-thunk

Redux-thunk 是 Redux 的一个中间件,它允许我们将异步操作放在 action 中,以便更好地控制状态的更新。在 Redux 中,我们通常使用 action 来更新状态,而 action 是一个纯函数,它返回一个对象用于更新状态。但是,当我们需要进行异步操作时,例如发送网络请求或进行延迟操作,我们就需要 Redux-thunk 来实现。

在 Redux-thunk 中,我们可以将异步操作作为一个函数返回给 action,这个函数就是所谓的 thunk,它接收 dispatch 和 getState 两个参数,可以实现异步操作后的状态更新。

Redux-thunk 的使用方法

  • 安装 Redux-thunk

使用 npm 或者 yarn 安装 Redux-thunk:

或者

  • 引入 Redux-thunk

在应用程序的入口文件中添加如下代码:

  • 创建 action

我们需要创建一个异步 action 来进行数据请求,例如获取用户列表:

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

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

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

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

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

在 fetchUsers 中,我们返回了一个函数,这个函数接收 dispatch 作为参数,可以在异步操作结束后更新状态。在函数中,我们首先 dispatch 了一个 fetchUsersRequest,表示数据请求开始;然后使用 fetch 函数向服务器请求数据,并在数据响应后 dispatch 了一个 fetchUsersSuccess;最后,在数据请求失败时,dispatch 了一个 fetchUsersFailure。

  • Reducer 更新状态

我们需要在 reducer 中更新状态,以便根据异步操作的结果进行状态更新。例如,当数据请求开始时,我们需要将 state 中的 loading 设置为 true,当数据响应成功时,我们将请求到的数据存储到 state 中,并将 loading 设置为 false。

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

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

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

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

在 reducer 中,我们根据 action 的 type 执行相应的操作,更新 state 中的内容。

  • 组件中使用异步 action

最后,我们在组件中使用异步 action,并让 Redux-thunk 处理异步操作。

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

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

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

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

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

在组件中,我们首先使用 useDispatch 和 useSelector 来获取 dispatch 和 state 中的 user,然后在 useEffect 中使用 dispatch 来调用异步 action,获取用户列表。当 loading 为 true 时,我们显示 Loading...,当 error 不为空时,我们显示错误信息;当 users 不为空时,我们显示用户列表。

总结

本文中我们详细介绍了 Redux-thunk 的使用方法,并结合实例进行了详细说明。Redux-thunk 可以让我们更好地管理程序状态,并在异步操作后更新状态,从而实现更为顺畅的用户体验。在实际开发中,我们可以根据需要选择不同的异步操作方案,例如使用 Redux-saga 或者 Axios 等工具,以便适应不同的需求。

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

纠错
反馈