使用 redux-thunk-action-reducer NPM 包进行前端开发

阅读时长 5 分钟读完

如果你正在开发一个前端应用,你很可能已经用过了 Redux 这个 JavaScript 库来管理你应用的状态。Redux 是一个非常流行的状态管理工具,但它也有一些弊端。例如,当你需要处理异步行为的时候,Redux 原生的 Action 和 Reducer 模型就显得不太好用了。

这时候我们可以用一个 NPM 包叫做 redux-thunk-action-reducer 来简化我们的异步处理。下面是一个使用 redux-thunk-action-reducer 去请求数据的例子:

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

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

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

我们来详细解释一下这个例子的每个部分。

创建一个异步 Action

异步 Action 和普通的 Action 最大的区别就是它返回的不是一个对象,而是一个函数。这个函数可以接受两个参数:dispatch 和 getState。dispatch 用来触发一个新的 Action,而 getState 则可以获取到 Redux 的当前状态。

这里我们用 redux-thunk-action-reducer 中的 createAsyncAction 工具函数来创建一个异步 Action。

在这里我们使用了 async 和 await 来简化异步处理。createAsyncAction 的第一个参数是 Action 的 type,而第二个参数则是返回一个 Promise 的函数,这个函数会在 Action 被触发时被执行。

创建一个 Reducer

我们使用 createReducer 工具函数来创建一个 Reducer:

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

createReducer 接受两个参数:初始状态和一个 Action 到状态的映射。我们使用了 ES6 的解构语法来设置初始状态,并为每个异步 Action 设置了 REQUEST、SUCCESS 和 FAILURE 三个状态。

添加 Redux 中间件

为了让 Redux 支持异步 Action,我们需要添加一些叫做 middleware(中间件) 的东西。在 createAsyncAction 内部,redux-thunk-action-reducer 帮我们自动添加了异步支持所需要的 middleware,但是我们还需要手动添加一个 logger middleware。

发起请求

一旦我们定义了我们的异步 Action,我们就可以像调用普通的 Action 一样去调用它:

这个函数会返回一个 Promise,你可以使用 async 和 await 来等待它完成。

总结

在本文中,我们主要介绍了 redux-thunk-action-reducer 这个 NPM 包的使用方法。它能够帮助我们简化 Redux 应用中处理异步行为的代码,并在保留原有 Action 和 Reducer 模型的基础上给我们更多的自由度。我们希望这篇文章能够帮助你学习 Redux 异步操作的处理方式,从而更好地搭建你的前端应用。

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

纠错
反馈