Redux 中的 Middleware 开发与实践

阅读时长 7 分钟读完

在 Redux 中,Middleware 是洋葱模型的重要组成部分,它允许你在 action 创建函数到达 reducer 之间执行自定义的逻辑。Middleware 可以用于实现日志记录、异步操作、错误处理等场景。在本文中,我们将介绍 Redux Middleware 的开发与实践,为你提供深度的学习和指导意义。

Middleware 基本概念及机制

首先让我们来了解 Middleware 的基本概念。Middleware 是一系列的处理函数,依次执行至 reducer,根据各自的功能可以分为以下几类:

  • 修改 store:修改 store 的值,比如更改某个属性、控制某个异步操作等。
  • 处理 action:单纯处理 action,比如日志记录、验证、派发其它 action 等。
  • 处理 API:处理 API 调用的情况。

Middleware 通过 applyMiddlewares 函数调用,该函数是 Redux 的核心插件的创建函数,下面是一个基本的中间件执行流程示意图:

我们可以看到,applyMiddlewares() 函数负责逐级处理 Middleware,而每个 Middleware 会执行下一个 Middleware 的 dispatch 函数并将结果向前传递,最后到达 reducer 进行更新。

Middleware 的基本机制是通过闭包实现的,一个 Middleware 可以通过 next 对象获取下一个 Middleware 的 dispatch 函数并执行。比如下面是一个简单示例代码:

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

-- ----- ---------- - -------- --
----------------------------
  ----- -----------------
--
展开代码

在上面的示例中,middleware 函数会输出当前 action 的 type,然后调用下一个 Middleware 的 dispatch 方法并传入 action 对象,与之前介绍的中间件机制是相同的。

Middleware 的实践

接下来我们将用实例来介绍如何编写 Middleware,并实现一个简单的请求记录中间件。

编写 Middleware

首先,我们需要编写一个 Middleware,来完成记录请求的功能。middleware 可以存储和输出请求相关的信息,比如请求开始时间、请求 URL 等。下面是一个简单的记录请求信息的 Middleware 示例代码:

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

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

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

    -- ----- ----------
    ------ ------------
  -
-
展开代码

在上面的代码中,我们实现了一个 requestLoggerMiddleware,该 Middleware 会在请求开始和结束时记录请求相关的信息,并输出到控制台。接下来我们需要集成该 Middleware 到我们的 Redux 应用中。

集成 Middleware

要在 Redux 中集成 Middleware,我们需要使用 applyMiddleware 函数来打造一个高阶 Store 创建函数 (store enhancer)。applyMiddleware 函数接收一个或多个 Middleware,并返回一个 Store 创建函数。下面是示例代码:

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

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

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

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

-- -- -----
----- ----- - ---------------------------------- ---
展开代码

在上面的代码中,我们使用 applyMiddleware 函数,将 requestLoggerMiddleware 添加到 Middleware 列表中。然后,我们将 createStore 函数和 Middleware 列表传入到 applyMiddleware 函数中,得到一个增强后的创建函数 createStoreWithMiddleware。最后,我们使用 createStoreWithMiddleware 函数在 Reducer 和初始 state 的基础上创建一个 store。

使用 Middleware

现在,我们已经成功地集成了 requestLoggerMiddleware 到我们的 Redux 应用中,并创建好了 store。接下来,我们将发起一个简单的请求,并记录请求相关的信息。下面是代码示例:

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

-- ------
------------- -- -
  ----------------
    ----- ---------------
    -------- -
      ---- --------------------------
    -
  --
-- -----
展开代码

在上面的代码中,我们发起了一个简单的请求,并在其中启用 requestLoggerMiddleware 这个 Middleware。然后,我们推迟 3 秒钟来模拟请求处理时间,当异步请求结束后,我们将调用 dispatch 来通知 Middleware 请求已经结束。在控制台输出中,我们将看到类似 [Middleware] Start request 'https://example.com/test' 和 [Middleware] End request 'https://example.com/test' in 3001ms 的信息。

结束语

在本文中,我们介绍了 Redux 中 Middleware 的基础概念及机制,并通过实例演示了如何编写、集成和使用 Middleware。Middleware 允许我们在 action 到 reducer 的处理过程中添加自定义逻辑,可以帮助我们实现日志记录、异步操作、错误处理等常见场景。对前端开发同学而言,Middleware 是 Redux 中一个重要的技术点,学习掌握 Middleware 开发与实践,可以提高代码质量、开发效率和程序性能。

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

纠错
反馈

纠错反馈