使用 Redux-thunk 实现异步请求

阅读时长 7 分钟读完

在前端开发中,我们经常需要处理异步请求,如发送 API 请求或通过 WebSocket 接收实时数据。Redux-thunk 是一个常用的 Redux 中间件,能够让我们在 Redux 中方便地处理异步请求。

Redux-thunk 简介

Redux-thunk 是一个 Redux 中间件,用于处理异步请求。它允许 action creators 返回一个函数,而不是只能返回一个简单的 actions 对象。这个函数可以在内部执行异步请求并 dispatch 不同的 actions 对象来更新 Redux store。

安装 Redux-thunk

安装 Redux-thunk 很简单,只需要通过 npm 或 yarn 安装即可。

配置 Redux-thunk

在 Redux 中使用 Redux-thunk 需要进行相应的配置。我们需要创建一个中间件来引入 Redux-thunk,并将这个中间件作为参数传递给 Redux createStore 函数。

Redux-thunk 示例

下面我们将展示如何使用 Redux-thunk 实现一个简单的异步请求。

假设我们的应用程序需要从 API 中获取一些数据并更新 Redux store。我们可以创建一个 action creator,它返回一个函数而不是一个 actions 对象。这个函数在被 dispatch 时将被 Redux-thunk 中间件调用。

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

这个函数将依次执行以下操作:

  1. dispatch 一个数据获取的开始 action。
  2. 发送 API 请求并处理响应。
  3. 如果成功,dispatch 一个数据获取的成功 action,并返回 JSON 数据。
  4. 如果失败,dispatch 一个数据获取的失败 action。

我们还需要定义这些 action。

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

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

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

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

我们还需要定义 reducer 来处理这些 action,并更新 Redux store 的状态。

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

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

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

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

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

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

这个 reducer 处理三种 action,分别是 FETCH_DATA_BEGIN、FETCH_DATA_SUCCESS 和 FETCH_DATA_FAILURE。它们分别更新了 loading、data 和 error 状态。

最后我们需要将这些定义好的 action 和 reducer 引入到组件中,并通过 connect 函数实现组件与 Redux store 的连接。

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

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

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

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

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

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

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

在这个组件中,我们定义了一个 fetchData props,它通过 connect 函数的 mapDispatchToProps 参数将 fetchData action 和组件连接起来。我们通过 useEffect hook 来在组件挂载后调用这个 props。

小结

使用 Redux-thunk 可以方便我们在 Redux 应用中处理异步请求,并更好地组织我们的代码。在本文中,我们介绍了 Redux-thunk 的基本原理,并通过一个简单的示例代码展示了如何使用它。相信读完本文,你能更深入地理解 Redux-thunk 的用法和原理。

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

纠错
反馈

纠错反馈