当前位置: 首页 > news >正文

【前端知识】React 基础巩固(三十八)——log、thunk、applyMiddleware中间件的核心代码

React 基础巩固(三十八)——log、thunk、applyMiddleware中间件的核心代码

一、打印日志-中间件核心代码

利用Monkey Patching,修改原有的程序逻辑,在调用dispatch的过程中,通过dispatchAndLog实现日志打印功能

// 打印日志-中间件核心代码
function log(store) {const next = store.dispatch;function logAndDispatch(action) {console.log("当前派发的action:", action);// 真正派发的代码:使用之前的dispatch进行派发next(action);console.log("派发之后的结果:", store.getState());}// monkey patch: 猴补丁 => 篡改现有的代码,对整体的执行逻辑进行修改store.dispatch = logAndDispatch;
}export default log;

二、thunk-中间件核心代码

redux中利用中间件redux-thunk 可以让dispatch不不仅能处理对象,还能处理函数

// react-thunk-中间件核心代码
function thunk(store) {const next = store.dispatch;function dispatchThunk(action) {if (typeof action === "function") {action(store.dispatch.store.getState);} else {next(action);}}store.dispatch = dispatchThunk;
}export default thunk;

三、applyMiddleware-中间件核心代码

单个调用函数来应用中间件,非常不方便,封装一个函数来合并中间件

function applyMiddleware(store, ...fns) {fns.forEach(fn => {fn(store)})
}export default applyMiddleware

四、应用中间件

在store/index.js中应用上面三个手动封装的中间件:

import { configureStore } from "@reduxjs/toolkit";import counterReducer from "./features/counter";
import homeReducer from "./features/home";
// 引入中间件
import { log, thunk, applyMiddleware } from "./middleware";const store = configureStore({reducer: {counter: counterReducer,home: homeReducer,},
});// 应用中间件
applyMiddleware(store, log, thunk);export default store;
http://www.lryc.cn/news/102209.html

相关文章:

  • hive删除数据进行恢复
  • 二、前端高德地图、渲染标记(Marker)引入自定义icon,手动设置zoom
  • UDF和UDAF、UDTF的区别
  • 小研究 - 浅析 JVM 中 GC 回收算法与垃圾收集器
  • Flowable-服务-骆驼任务
  • 用html+javascript打造公文一键排版系统9:主送机关排版
  • SpringBoot 集成 EasyExcel 3.x 优雅实现 Excel 导入导出
  • RT1052 的四定时器
  • ViT-vision transformer
  • Election of the King 2023牛客暑期多校训练营4-F
  • Nacos的搭建及服务调用
  • uniapp小程序自定义loding,通过状态管理配置全局使用
  • leetcode 45. 跳跃游戏 II
  • 力扣热门100题之矩阵置0【中等】
  • 【机器学习】Classification using Logistic Regression
  • 全方位支持图文和音视频、100+增强功能,Facebook开源数据增强库AugLy
  • RxSwift 使用方式
  • HTML5 Web Worker
  • 25.9 matlab里面的10中优化方法介绍—— 惩罚函数法求约束最优化问题(matlab程序)
  • django channels实战(websocket底层原理和案例)
  • 学习使用axios,绑定动态数据
  • c语言内存函数的深度解析
  • 低代码平台介绍(国内常见的)
  • matlab RRR机械臂 简略代码
  • 集成测试,单元测试隔离 maven-surefire-plugin
  • 渗透测试基础知识(1)
  • Android NDK开发
  • 使用python爬取淘宝商品信息
  • QEMU源码全解析18 —— QOM介绍(7)
  • 【华为OD机试】 选修课