Redux官方文档学习笔记 (四): 中间件 (Middleware)

前言

我们之前已了解了 Redux 的三大基本原则。 但是,实际情况遇到时,我们会发现在某些情况下,这些原则并不能完全满足我们的需求。本文中,我们将讨论 Redux 中的中间件 (Middleware), 并学习如何使用它来增强或改进 Redux 的功能。

中间件 (Middleware) 是一个函数,它可以调用 dispatch,并且它还具有以下属性:

  1. 它可以在 action 被发起之后,到达 reducer 之前,拦截 action。
  2. 它可以执行 dispatch,从而继续向下传递 action,或者阻止 action 的继续传递。
  3. 它可以访问 getState() 方法,从而获取当前 store 的状态。
  4. 它可以访问 dispatch 方法以及 getState 方法从而对 action 进行改变。

为什么需要中间件?

当你开始使用 Redux 时,你可能会遇到一些在处理异步操作时需要进行的额外操作,比如异步数据获取、日志记录、错误处理等等。为了解决这些问题, Redux 就引入了中间件机制。

例如,如果你希望在发出一个 action 时添加一些额外的操作,比如打印 log,那么你可以使用中间件实现这个需求。而且,由于中间件是可重用和可配置的,你可以在不同的情况下,对它们进行组合和使用。

中间件的使用方法

在 Redux 中,中间件是一个函数。通过调用 applyMiddleware 这个函数并传递一个或多个中间件到 createStore,中间件就可以被注册并处理从 dispatch 发出的所有 action。

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

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

如此注册中间件 thunk 就能够拦截发起的 actions, 在异步操作时在调用 dispatch 并执行其余操作。

Redux 中内置的中间件

applyMiddleware

在上述示例代码中,我们已经看到,Redux 中内置了一个 applyMiddleware 中间件函数。这个函数可以接收一个或多个中间件,并将它们放到一个数组中合并在一起。

thunk

thunk 中间件使得 action 创建函数可以返回一个函数,而不仅仅是一个 action 对象。这个函数可以在 dispatch 方法被调用时,执行异步操作,或者请求数据之后再发出 action 对象。

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

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

logger

logger 中间件使得在 dispatch 方法被调用时,日志记录被打印出来。

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

全文完整代码:

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

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

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

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

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

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

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

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

结论

本文我们介绍了 Redux 中间件的基本概念和使用方法。中间件可以使 Redux 的功能更加强大和灵活,同时还帮助解决了一些与异步操作相关的问题。在实践中,中间件得到了广泛的应用。因此,学会中间件的使用方法对于前端开发者而言是非常有价值的。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/670f48965f55128102638ac5


猜你喜欢

  • ECMAScript 2017 中的 SharedArrayBuffer 易受攻击:如何确保安全

    ECMAScript 2017 中的 SharedArrayBuffer 易受攻击:如何确保安全 SharedArrayBuffer 是在 ECMAScript 2017 中引入的一个新特性。

    4 天前
  • 将 Node.js 与 GitHub 完美集成的完整指南

    介绍 Node.js 是一种基于 Chrome V8 引擎的 JavaScript 运行环境,可以实现服务端的 JavaScript 编码,是目前前端开发中广泛使用的技术之一。

    4 天前
  • Babel 编译出现 “Cannot set property 'createClass' of undefined” 错误怎么办?

    最近,我们在使用 Babel 编译前端代码时,出现了 “Cannot set property 'createClass' of undefined” 错误。这个错误在使用 React 框架时出现的概...

    4 天前
  • RxJS combineLatest 操作符的性能优化

    RxJS 是一个用于响应式编程的 JavaScript 库,它允许开发者轻松地创建和处理异步数据流。RxJS 有许多操作符,其中 combineLatest 操作符是用于将多个 observables...

    4 天前
  • 使用 Express.js 和 Sequelize.js 进行数据库操作

    前言 在开发 Web 应用程序时,数据库是必要的。使用 Node.js 进行开发,有许多流行的数据库解决方案,如 MongoDB、MySQL、PostgreSQL 等。

    4 天前
  • Web Components:实现简单的数据验证

    随着 Web 应用程序的不断发展,越来越多的前端开发人员开始使用 Web Components。Web Components 是一组浏览器 API,可以帮助我们构建可重用的自定义元素和组件,这些组件可...

    4 天前
  • Serverless 架构下如何优化函数执行性能?

    随着云计算与前端技术的不断发展,Serverless 架构已经成为了各行各业中备受关注的技术。作为一种无需手动管理服务器资源、按需自动伸缩的计算模型,它的优势在于可以极大地降低运维成本、提高开发效率和...

    4 天前
  • 如何在响应式设计中使用 SVG 图像

    SVG (可缩放矢量图形) 是一种基于 XML 的标记语言,用于描述二维向量图形。由于它们是矢量图形,因此在任何尺寸下都可以放大或缩小,而不会失去清晰度。这使得 SVG 图像成为用于网页和应用程序设计...

    4 天前
  • 使用 Hapi.js 实现跨域 WebSocket 通信

    在前端开发中,有时需要实现跨域的 WebSocket 通信,以便实现实时的双向通信。Hapi.js 是一个基于 Node.js 的 web 框架,它非常适合做这种任务。

    4 天前
  • GraphQL 漫谈

    本文将对 GraphQL 的概念及起源进行介绍,并提供详细的学习指导意义以及示例代码。 引言 GraphQL 是 Facebook 在2012年推出的一种数据查询语言,旨在解决 REST API 在多...

    4 天前
  • TypeScript 中如何使用类型保护

    TypeScript 中如何使用类型保护 在前端开发中,我们经常会使用 TypeScript 来规范项目代码,这样可以使代码更加清晰、易于维护和扩展。在 TypeScript 中,我们可以定义各种类型...

    4 天前
  • 在 Vue.js 中使用 ESLint 控制代码风格和规范

    什么是 ESLint? ESLint 是一个开源的 JavaScript 代码检查工具,在团队开发中被广泛使用。它可以帮助开发者发现和修复代码错误、强制执行代码规范和最佳实践,以及防止一些常见的代码陷...

    4 天前
  • CSS Reset 带来的设计优势与争议

    CSS Reset 是一种常见的前端技术,它的目的是消除浏览器默认样式带来的不一致性和样式冲突,并且为网站样式设计提供一个更好的基础。然而,使用 CSS Reset 技术也存在一些争议,本文将探讨 C...

    4 天前
  • React Router 在 SPA 应用中的使用最佳实践

    React Router 是一个 React 应用的路由库。它使得在 SPA(单页应用)中实现多个页面的切换变得更加容易。本文将探讨 React Router 在 SPA 应用中的使用最佳实践,包含详...

    4 天前
  • Node.js 中的 HTTP 请求:指南和最佳实践

    随着 Node.js 在前端应用中的广泛应用,HTTP 请求已经成为了我们工作中最基本的操作之一。在本文中,我们将会为大家提供一份关于 Node.js 中 HTTP 请求的指南和最佳实践,帮助大家更好...

    4 天前
  • RESTful API 实现各种 HTTP 响应状态码的正确姿势

    在开发 RESTful API 的过程中,正确处理 HTTP 响应状态码是非常重要的一步。HTTP 响应状态码会告诉客户端请求的成功或失败的状态,并提供进一步的上下文信息。

    4 天前
  • 如何在 Next.js 中使用 Antd?

    如果你是一名前端工程师,并且熟悉 React 框架,那么你一定听说过 Antd。Antd 是开源的 React UI 库,由 75 个人的团队维护,提供了许多优美的 UI 组件、布局、表单等等。

    4 天前
  • ESLint 与 TypeScript 的兼容性

    引言 在现代的 Web 前端开发中,静态代码检查工具成为了开发者们必不可少的工具之一。而 ESLint 作为最为流行的静态代码检查器之一,可以检查 JavaScript 代码中存在的语法问题,并且更进...

    4 天前
  • 如何在 Tailwind 中使用 “重定向” 选项卡?

    Tailwind 是一个流行的 CSS 框架,它提供了一种快速、简便地创建 UI 界面的方式。其中重定向选项卡(Redirect Tabs)是一种简单而强大的元素,它们可以为您的网站提供导航和与不同页...

    4 天前
  • 响应式设计下的动态效果与性能平衡

    在现代 Web 开发中,响应式设计(Responsive Design)是一种非常流行的方法,它可以使得网站能够在不同设备上(如桌面、平板、手机等)都能够以最佳的方式展示,从而提供更好的用户体验。

    4 天前

相关推荐

    暂无文章