如何提升 Redux 中间件的复用性和可维护性

阅读时长 7 分钟读完

在 Redux 中,中间件是帮助我们处理异步逻辑,以及添加额外功能的重要手段。然而,对于中大型 Redux 应用,单个中间件的代码量可能会变得非常庞大,这给维护和复用造成了很大的困难。在本文中,我们将探讨如何提升 Redux 中间件的复用性和可维护性。

提取公共逻辑

在创建中间件之前,我们应该思考一个问题:我们所需要实现的逻辑,是否已经在其他中间件中处理过了。如果是,我们可以将这一部分公共逻辑提取出来,作为一个单独的函数或类,供我们的中间件使用。

例如,我们在不同的中间件中可能会用到一个 isValidAction 函数来检查 Redux action 是否符合某些规范。这个函数可以从多个中间件中提取出来,放在一个被称为 utils.js 的公共文件中:

接下来,我们可以在其他中间件文件中引入该函数来进行 action 检查:

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

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

  -- -----
-

通过这种方式,我们可以避免多个中间件中编写相同的代码,减少重复劳动,提高代码复用和可维护性。

链式调用

在 Redux 中,我们可以使用 applyMiddleware 函数来同时使用多个中间件。例如:

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

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

这种方式确实可以方便地使用多个中间件。但是,这也可能导致中间件之间的紧密耦合,进而导致代码维护困难。

如果我们需要在多个中间件中共享数据或状态,最好的方式是使用链式调用,而不是一次性传入所有中间件。

例如,我们可以编写一个名为 notificationMiddleware 的中间件,将其与其他中间件链接在一起:

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

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

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

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

接下来,我们可以在创建 store 时将中间件链接起来:

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

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

注意,在 notificationMiddleware 中,我们返回了一个函数,该函数接受一个名为 next 的参数。这里的 next 就是下一个中间件的 dispatch 函数。通过这种方式,我们实现了多个中间件之间的松耦合。

使用高阶函数

在 Redux 中,中间件通常使用闭包来实现某些功能。然而,当我们需要添加相似但略有不同的功能时,我们可能需要复制粘贴整个中间件代码并进行微小的修改,这样的代码重复是非常繁琐和容易导致错误的。

这时候,我们可以使用高阶函数来提高代码复用性。例如,我们可以编写一个名为 createFilterMiddleware 的高阶函数,用于创建一个接收特定 filter 参数的中间件:

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

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

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

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

使用这个高阶函数,我们就可以轻松地创建多个不同的中间件,而不必重复整个中间件代码。例如,如果我们需要一个传递了 .important 属性的 action 才会触发的中间件,我们可以这样创建它:

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

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

总结

在本文中,我们探讨了如何在 Redux 中提升中间件的复用性和可维护性。我们提出了以下几点建议:

  • 提取公共逻辑。
  • 使用链式调用来实现多个中间件之间的松耦合。
  • 使用高阶函数来提高代码复用性。

通过遵循这些建议,我们可以更轻松地开发、维护和重用我们的 Redux 中间件。

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

纠错
反馈