解决 React 中 Redux 显示异步问题

在使用 React 及其对应的 Redux 状态管理框架时,你可能会遇到异步请求的数据渲染问题。比如在组件渲染前还没有得到异步请求的数据,这时 redux store 中的数据就无法及时更新,导致组件无法及时渲染对应的数据。本文将介绍一个解决这类问题的方法,通过 redux-thunk 中间件来处理异步数据请求,该方法能够解决 React 中 Redux 显示异步问题。

redux-thunk

redux-thunk 中间件允许我们在 Redux 流程中进行异步操作,此外它可以让 action 在需要时返回一个函数而不是一个对象。这就允许我们在 action 中进行异步操作,等异步操作完成后在 dispatch action。

实现异步操作

假设有一个简单的异步请求发送到服务器,系统需要在请求发送之前清空组件的所有旧数据,并在请求返回后将新数据存储到 Redux store 中。这种实现

首先,我们定义一个 Redux action,用于在异步请求前和请求后分别清空数据和更新数据,代码如下所示:

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

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

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

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

在上面的代码中,requestData() action 简单地返回一个类型为 REQUEST_DATA 的对象。而 receiveData(data) action 返回一个类型为 RECEIVE_DATA 的对象以及数据对象作为 payload 。fetchData(url) action 返回一个函数,该函数被调用时 dispatch requestData() action,然后发送异步请求并在请求后将响应数据 dispatch 到 receiveData() action。

接下来,我们使用 React 组件来消费这些 Redux action。我们使用 mapStateToProps 函数将 Redux store 中的状态转换为 props,这里我们提供了一个当数据被请求和数据被接收时渲染的组件示例:

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

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

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

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

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

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

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

在 App 组件中,我们定义了状态转换函数 mapStateToProps ,将 Redux store 中的状态解构到组件的 props 中,并使用 Connect 高阶组件将 fetchData() 方法注入到 props。

在 useEffect 钩子中,我们初始化组件,并在 fetchData('https://jsonplaceholder.typicode.com/users') 调用中完成异步请求。此外,我们还检查 isFetching 和 data 的值,以在加载数据时显示 Loading... 或者在数据为空时显示错误消息。

结论

Redux-thunk 中间件是一种处理异步请求的优秀解决方案,它允许我们封装异步请求并将异步请求结果更新到 Redux store 中,这解决了在 React 框架中 Redux 显示异步问题。在本文中,我们展示了如何使用 redux-thunk 中间件来处理异步操作,可以帮助您优化代码,提高 React 应用程序的性能和效率。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671da5fa9babaf620fb7640c