npm 包 redux-actionemitter 使用教程

阅读时长 7 分钟读完

前言

随着互联网的飞速发展,前端技术也在快速迭代。常见 MVC、MVVM 等框架、库不断出现,以 React 为代表的前端库更是广泛应用于前端开发中。而在 React 应用中,状态管理也日益重要。Redux 作为 React 最流行的状态管理库之一,已经成为很多项目的首选。开发者一般通过 redux-thunkredux-saga 等中间件对 Redux 进行加强。今天介绍一款新型的中间件 redux-actionemitter,它能使开发者更加简单方便地处理异步行为。

何时使用 redux-actionemitter

在 React 应用中,Redux 进行状态管理是必不可少的一环。Redux 的核心概念可以简单概括为三个:action、reducer 和 store,其中,action 负责表达“发生了什么事件”,reducer 负责处理“发生的事件如何影响应用状态”,store 则通常表示应用状态。

然而,当我们需要处理异步行为时,一般需要借助其他中间件进行加强。这时,redux-actionemitter 这个中间件就可以帮助我们处理异步行为的「发起者与接收者」的通讯,从而更加简单愉悦地完成异步逻辑。

对于异步操作,开发者一般需要自己设计动作发起的格式,然后发起一个 action,并在 reducer 中处理该动作。一般来说,这个流程是通过 thunksaga 进行的,但实际操作中,使用 thunksaga 进行异步流程操作,不仅繁琐,而且很容易出错。这时候,redux-actionemitter 可以大大提高异步操作的效率和准确性。

安装及使用

首先你需要使用 npm 安装 redux-actionemitter

然后,在 Redux 的 createStore() 函数中,我们需要同时加入 redux-actionemitterredux-thunk

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

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

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

对于发起 action ,只需要在 action creator 中使用 emitter.emit() 方法即可。下面是一个例子:

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

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

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

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

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

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

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

可以看到,在异步操作中,我们只需要在最后使用 emitter.emit() 就可以将需要触发的事件发送给接收器,从而让接收器进行处理。

在此处稍稍介绍一下 dispatch() 函数和 emitter.emit() 函数的区别:

  • dispatch() 函数是用来让 reducer 执行的,设计者通过 action creator 生成不同的 action,并将其发送给 reducer,让 reducer 根据 action 的 type,对 state 进行更新,进而影响 store 的变化。
  • emitter.emit() 的作用是让客户端发送事件给接收器,进而触发特定的操作,不涉及redux中的 action 与托管的 state。

举个例子,假设我们想要在获取数据之后给用户提示 “数据加载成功” 或 “数据加载失败”。通常我们会为不同的数据请求类型设置不同的action类型,然后利用redux-actionemitteremitter.emit() 函数向接收器发送事件来触发提示操作。假如你想让接收器监听 /common/tips 事件,你可以在 action 代码中这样使用:

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

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

如此一来,就可以在接收器监听到 /common/tips 事件,然后进行提醒操作。

注意,接收器需要使用对应的库,如 socket.ioengine.io 等,来实现事件监听。

总结

redux-actionemitter 中间件将异步操作和事件解耦,让开发者能够更加专注流程处理,减少代码维护难度。如果你想要更加简洁、高效地处理异步逻辑,不妨试试 redux-actionemitter

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

纠错
反馈