使用 Redux Middleware 避免过多的模板代码

在一个前端应用中,为了保持状态的稳定和可维护性,许多开发者选择使用 Redux 作为状态管理工具。然而,Redux 的框架仍然有一些繁琐的模板代码需要编写,使得代码变得难以维护。这些模板代码如 Action 的定义、Reducers 的编写等。我们可以使用 Redux Middleware 来减少这些模板代码的编写,从而降低前端代码维护的难度。

Redux Middleware

Redux Middleware 是可以介入 Redux 的 action dispatch 流程,完成一些定制化功能的代码。例如,我们可以让 Middleware 在 dispatch action 前后输出 log,或者在异步 action 的 dispatch 过程中加入等待的逻辑。由于 Middleware 可以读写状态,因此我们也可以在 Middleware 内部实现 Action 和 Reducer 的功能,从而减少这些模板代码的编写。

实现一个 Middleware

让我们看一个 Middleware 的例子。假设我们的应用中有多个页签,我们要实现在切换页签时,将旧页签的状态保存起来,以便再次切换回该页签时恢复状态。我们需要编写类似以下的代码:

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

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

很显然,这段代码耦合了业务逻辑和 Redux 的模板代码,增加了维护的难度。我们可以编写一个 Middleware 来实现保存旧页签状态的逻辑,将代码改成以下形式:

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

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

我们定义了一个 Middleware saveState,在每次发起 CHANGE_TAB action 时,保存 state。然后在需要恢复 state 时发起 RESTORE_TAB action,Reducer 中就可以读取上一次的状态了。我们成功将业务逻辑和 Redux 模板代码解耦。

结论

Redux Middleware 是一个强大的工具,使用它可以大大减少模板代码的编写,同时对业务逻辑进行更细粒度的拆分。实际上,几乎所有的 redux 中间件都是这种模式。在实际项目中,使用 Middleware 可能会使代码变得更加易于维护,团队开发也会更加方便。现在,你可以自己动手实现一个 Middleware 了!

参考

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