返回顶部
首页 > 资讯 > 前端开发 > 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://lsjlt.com/news/191747.html(转载时请注明来源链接)

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

猜你喜欢
  • Redux中间件的使用方法教程
    目录前言应用如何创建一个中间件如何应用中间件原理前言 在Express框架中,middleware是指可以被嵌入在框架接收请求到产生响应过程中的代码。在Redux中,middlewa...
    99+
    2023-01-31
    Redux中间件 Redux中间件的作用 Redux中间件原理
  • redux功能强大的Middleware中间件使用学习
    目录引言redux中的Middleware记录日志手动记录redux-sagaGenerator函数实际使用场景引言 上一节我们学习了redux在实际项目的应用细节,这一节我们来学习...
    99+
    2024-04-02
  • 手把手教会你使用redux的入门教程
    目录Redux详解Redux介绍Redux有什么作用如何在React中使用Redux如何使用React-reduxRedux详解 Redux介绍 Redux 是 JavaScript...
    99+
    2024-04-02
  • React项目中使用Redux的 react-redux
    目录背景UI 组件容器组件connect()mapStateToProps()mapDispatchToProps()组件实例:计数器背景 在前面文章一文理解Redux及其工作原理中...
    99+
    2024-04-02
  • React immer与Redux Toolkit使用教程详解
    目录1. immer1.1 setState结合immer使用1.2 useState结合immer使用1.3 immer和redux集合2. Redux Toolkit1. immer概述:它和immutable相似的,实现了操作对象的数...
    99+
    2024-04-02
  • Node.js使用Middleware中间件教程详解
    目录中间件依赖注入应用中间件路由通配符中间件消费者路由排除函数式中间件多个中间件全局中间件中间件 中间件是一个在路由处理程序之前被调用的函数。中间件函数可以访问请求和响应对象,以及应...
    99+
    2023-05-15
    Node.js Middleware Node.js 中间件
  • 一文详解React Redux使用方法
    目录一、理解JavaScript纯函数1.1 纯函数的概念1.2 副作用概念的理解1.3 纯函数在函数式编程的重要性二、Redux的核心思想2.1 为什么需要 Redux2.2 Re...
    99+
    2024-04-02
  • node.js使用multer中间件上传文件的方法
    这篇文章主要介绍了node.js使用multer中间件上传文件的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。body-parser中间件,其实“极不完美” —— 它只能...
    99+
    2023-06-06
  • 实现redux, koa, express中间件的示例分析
    小编给大家分享一下实现redux, koa, express中间件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果你...
    99+
    2024-04-02
  • React 中使用 Redux 的 4 种写法小结
    目录不使用 Redux 的写法最底层的写法React-ReduxReact-Redux 配合 connect 高阶组件React-Rudex 配合 React HooksRedux ...
    99+
    2024-04-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
  • connect中间件session、cookie的使用方法分享
    Connect是一个node中间件(middleware)框架。具体不表,看官网介绍 http://www.senchalabs.org/connect/ 在app.js中配置下(必须放到app.use(r...
    99+
    2022-06-04
    使用方法 中间件 connect
  • Python100天学习教程:中间件的应用
    实现登录验证我们继续来完善投票应用。在上一个章节中,我们在用户登录成功后通过session保留了用户信息,接下来我们可以应用做一些调整,要求在为老师投票时必须要先登录,登录过的用户可以投票,否则就将用户引导到登录页面,为此我们可以这样修改视...
    99+
    2023-06-02
  • 小程序redux性能优化的方法
    这篇文章主要介绍“小程序redux性能优化的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“小程序redux性能优化的方法”文章能帮助大家解决问题。首先了解小程序的工作原理和性能关键点。1工作原理...
    99+
    2023-06-26
  • redux工作原理讲解及使用方法
    目录1. redux 是什么?2.redux的原理3. 如何使用 redux?(1).安装redux,创建redux文件夹,建立store.js(2).建立reducers.js(3...
    99+
    2024-04-02
  • ReactNative状态管理redux使用的方法是什么
    这篇“ReactNative状态管理redux使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ReactNat...
    99+
    2023-07-05
  • Golang Gin中间件Next()方法怎么使用
    这篇“Golang Gin中间件Next()方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang...
    99+
    2023-07-06
  • React代码的使用方法教程
    本篇内容介绍了“React代码的使用方法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 仅对一个条...
    99+
    2024-04-02
  • Android上使用grpc的方法教程
    前言最近的一个项目使用到了grpc实现跨平台的远程调用,在安卓端使用的时候遇到了一些坑,这里记录一下。首先根据grpc android的官方Demo配置grpc依赖,测试它的hello world工程。编译谷歌官方的helloworld工程...
    99+
    2023-05-31
    android grpc 使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作