广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Redux中间件的使用方法教程
  • 819
分享到

Redux中间件的使用方法教程

Redux中间件Redux中间件的作用Redux中间件原理 2023-01-31 12:01:31 819人浏览 泡泡鱼
摘要

目录前言应用如何创建一个中间件如何应用中间件原理前言 在Express框架中,middleware是指可以被嵌入在框架接收请求到产生响应过程中的代码。在Redux中,middlewa

前言

  • 在Express框架中,middleware是指可以被嵌入在框架接收请求到产生响应过程中的代码。
  • 在Redux中,middleware提供的是位于action被发起后,到达reducer之前的扩展点

Q: 中间件的代码什么时候被调用?

A: 在 action 被发起之后,到达 reducer 之前。

下面用流程图来解释middleware:

应用

如何创建一个中间件

首先,Redux中间件的形式为一个柯里化的函数。

function exampleMiddleware(storeapi) {
  return function wrapDispatch(next) {
    return function handleAction(action) {
      // 在这里做你想做的事情,做完后,通过返回next(action)向下一个middleware传递action
      return next(action)
    }
  }
}
  • 最外层的exampleMiddleware函数将会被applyMiddleware直接调用,并传入一个包含dispatch()getState()的对象作为参数
  • 调用storeAPI.dispatch(action)时,它会将操作发送到中间件链的开头,重新执行所有的中间件
  • 中间层的wrapDispatch函数接收一个名为next的函数作为其参数。这个函数实际上是中间件链中的下一个中间件。如果这个中间件是序列中的最后一个,那么next函数实际上是原始的store.dispatch函数。调用next(action)会将action传递给中间件链中的下一个中间件
  • 最后,handleAction函数接收当前action作为其参数,并在每次dispatch(action)时调用

可以使用es6的箭头函数简化此函数:

const exampleMiddleware = store => next => action => {
  return next(action)
}

如何应用中间件

Redux 中间件实际上是在 Redux 内置的一个非常特殊的存储增强器之上实现的,称为 applyMiddleware。

import { createStore, applyMiddleware } from 'redux'
import rootReducer from './reducer'
import { print1, print2, print3 } from './exampleAddons/middleware'
const middlewareEnhancer = applyMiddleware(print1, print2, print3)
const store = createStore(rootReducer, middlewareEnhancer)
export default store

原理

Redux 如何装载Middleware

相关源码

redux/src/createStore.ts

redux/src/applyMiddleware.ts

redux/src/compose.ts

applyMiddleware和Compose函数的执行过程:

// 省略了中间代码并去除typescript类型,并将Compose和applyMiddleware函数放在一起便于展示
function compose(...funcs) {
	// 没有传入middleware,直接返回
	if (funcs.length === 0) {
	  return (arg) => arg
	}
	// 传入一个middleware,无需构造,直接返回
	if (funcs.length === 1) {
	  return funcs[0]
	}
	// 进行函数柯里化返回一个形如:fn1(fn2(fn3(store.dispatch))) 的新dispatch函数
	return funcs.reduce(
	  (a, b) =>
	    (...args: any) =>
	      a(b(...args))
	)
}
function applyMiddleware(...middlewares){
	return (createStore) => (reducer, preloadedState) => {
		// createStore中检测到由applyMiddleware函数生成的enhancer时,将createStore、reducer、initialState传入,在函数中创建一个临时的store
		const store = createStore(reducer, preloadedState)
		// 创建一个临时的dispatch函数,此函数抛出异常,用于防止处理传入的middlewares时提前调用dispatch
		let dispatch = () => {
			throw new Error(
			  'Dispatching while constructing your middleware is not allowed. ' +
			    'Other middleware would not be applied to this dispatch.'
			)
		}
		// 给middleware分发store
		const middlewareAPI = {
		  getState: store.getState,
		  dispatch: (action, ...args) => dispatch(action, ...args)
		}
		// 让每个middleware带着middlewareAPI这个参数执行一遍,然后获得带着相同的store的middlewares
		const chain = middlewares.map(middleware => middleware(middlewareAPI))
		// 将所有chain中的函数利用Compose函数组装成一个新的dispatch函数
		// 如:dispatch=fn1(fn2(fn3(store.dispatch)))
		dispatch = compose(...chain)(store.dispatch)
		// 将生成的dispatch函数整合到刚才生成的store中并返回
		return {
		  ...store,
		  dispatch
		}
	}
}

当我们调用store.dispatch(action)时,我们实际上是在调用管道中的第一个中间件。然后,该中间件可以在收到action时做任何它想做的事情,并在做完该事情后将action传给下一个中间件继续处理,直到所有中间件处理完成,调用原始的dispatch函数将action提交给reducer处理引发state变化

到此这篇关于Redux中间件的使用方法教程的文章就介绍到这了,更多相关Redux中间件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Redux中间件的使用方法教程

本文链接: https://www.lsjlt.com/news/191747.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redux中间件的使用方法教程
    目录前言应用如何创建一个中间件如何应用中间件原理前言 在Express框架中,middleware是指可以被嵌入在框架接收请求到产生响应过程中的代码。在Redux中,middlewa...
    99+
    2023-01-31
    Redux中间件 Redux中间件的作用 Redux中间件原理
  • redux功能强大的Middleware中间件使用学习
    目录引言redux中的Middleware记录日志手动记录redux-sagaGenerator函数实际使用场景引言 上一节我们学习了redux在实际项目的应用细节,这一节我们来学习...
    99+
    2022-11-13
  • 手把手教会你使用redux的入门教程
    目录Redux详解Redux介绍Redux有什么作用如何在React中使用Redux如何使用React-reduxRedux详解 Redux介绍 Redux 是 JavaScript...
    99+
    2022-11-13
  • Node.js使用Middleware中间件教程详解
    目录中间件依赖注入应用中间件路由通配符中间件消费者路由排除函数式中间件多个中间件全局中间件中间件 中间件是一个在路由处理程序之前被调用的函数。中间件函数可以访问请求和响应对象,以及应...
    99+
    2023-05-15
    Node.js Middleware Node.js 中间件
  • node.js使用multer中间件上传文件的方法
    这篇文章主要介绍了node.js使用multer中间件上传文件的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。body-parser中间件,其实“极不完美” —— 它只能...
    99+
    2023-06-06
  • Python100天学习教程:中间件的应用
    实现登录验证我们继续来完善投票应用。在上一个章节中,我们在用户登录成功后通过session保留了用户信息,接下来我们可以应用做一些调整,要求在为老师投票时必须要先登录,登录过的用户可以投票,否则就将用户引导到登录页面,为此我们可以这样修改视...
    99+
    2023-06-02
  • Python中的sort()方法使用基础教程
    一、基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)ite...
    99+
    2022-06-04
    基础教程 方法 Python
  • Python中set方法的使用教程详解
    目录一、序言二、常用set()方法详解三、总结1.创建空集合2.将可迭代对象转换为集合3.set()方法的其他用法4.结论一、序言 在Python中,set是一种集合数据类型,表示一...
    99+
    2023-05-18
    Python set方法使用 Python set方法 Python set
  • ReactNative状态管理redux使用的方法是什么
    这篇“ReactNative状态管理redux使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ReactNat...
    99+
    2023-07-05
  • connect中间件session、cookie的使用方法分享
    Connect是一个node中间件(middleware)框架。具体不表,看官网介绍 http://www.senchalabs.org/connect/ 在app.js中配置下(必须放到app.use(r...
    99+
    2022-06-04
    使用方法 中间件 connect
  • React 中使用 Redux 的 4 种写法小结
    目录不使用 Redux 的写法最底层的写法React-ReduxReact-Redux 配合 connect 高阶组件React-Rudex 配合 React HooksRedux ...
    99+
    2022-11-13
  • React代码的使用方法教程
    本篇内容介绍了“React代码的使用方法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 仅对一个条...
    99+
    2022-10-19
  • Android上使用grpc的方法教程
    前言最近的一个项目使用到了grpc实现跨平台的远程调用,在安卓端使用的时候遇到了一些坑,这里记录一下。首先根据grpc android的官方Demo配置grpc依赖,测试它的hello world工程。编译谷歌官方的helloworld工程...
    99+
    2023-05-31
    android grpc 使用
  • vue时间线组件的使用方法
    本文实例为大家分享了vue时间线组件的具体实现代码,供大家参考,具体内容如下 效果 vue-时间线组件(时间轴组件)代码 <template> <ul...
    99+
    2022-11-12
  • Golang Gin中间件Next()方法怎么使用
    这篇“Golang Gin中间件Next()方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang...
    99+
    2023-07-06
  • 实现页面之间通信的方法教程
    这篇文章主要介绍“实现页面之间通信的方法教程”,在日常操作中,相信很多人在实现页面之间通信的方法教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”实现页面之间通信的方法教程”...
    99+
    2022-10-19
  • ASP.NET Core中间件用法与官方常用中间件介绍
    目录一、什么是中间件中间件和过滤器的区别二、中间件常用方法1、Run方法2、Use方法3、Map方法4、Mapwhen方法三、自定义中间件四、官方常用中间件1、异常处理中间件2、HT...
    99+
    2022-11-13
  • 教你如何利用.net core实现反向代理中间件的方法
    这篇文章主要给大家介绍了关于利用.net core实现反向代理中间件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.net core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧最近在将一些项目的rest api迁...
    99+
    2023-06-03
  • ASP.NET Core中间件用法与官方常用中间件的示例分析
    小编给大家分享一下ASP.NET Core中间件用法与官方常用中间件的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是中间件我们都知道,任何的一个web框架都是把http请求封装成一个管道,每一次...
    99+
    2023-06-29
  • win7共享文件夹的方法教程
    在同一办公局域网下,建立共享文件夹能够更便捷地传输和共享文件,提升办公效率。不过不同系统设置共享文件夹的方法会有不同,有网友不清楚win7如何设置共享文件夹。大家赶快来学习win7共享文件夹设置方法,小编将为您介绍。  1、找到要共享的文件...
    99+
    2023-07-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作