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

react-redux的connect函数实现

react-redux对store订阅的实现原理:

storeContext.js

import { createContext } from "react";export const StoreContext = createContext()

connect.js

import React, { PureComponent } from 'react'
// import store from '../../store';
import {StoreContext} from './storeContext'export function connect(mapStateToProps, mapDispatchToProps) {// 返回高阶组件:函数return function(WrapperComponent) {// 返回组件class NewComponent extends PureComponent {constructor(props, context) {super(props);this.state = mapStateToProps(context.getState())}// 组件挂载时订阅变化 并更新componentDidMount() {this.unsubscribe =  this.context.subscribe(() => {this.setState(mapStateToProps(this.context.getState()))})}// 组件卸载时  关闭订阅componentWillUnmount() {this.unsubscribe()}render() {// 返回组件return <WrapperComponent {...this.props} {...mapStateToProps(this.context.getState())} {...mapDispatchToProps(this.context.dispatch)} />}}NewComponent.contextType = StoreContextreturn NewComponent}
} 

index.js 

export {connect} from './connect'
export { StoreContext } from './storeContext'

在入口文件index.js引入

import store from "./store"
import { StoreContext } from "./使用redux/hoc"const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(<Provider store={store}><StoreContext.Provider value={store}><App/></StoreContext.Provider></Provider>)

通过context来解耦connect文件中对store的依赖,使connect的独立封装性更好。

http://www.lryc.cn/news/196609.html

相关文章:

  • Vue3使用Vite创建项目
  • NCV7724DQBR2G车规级半桥电机驱动芯片-专为汽车,工业自动化应用提供完美解决方案
  • NSS [GWCTF 2019]枯燥的抽奖
  • 微信小程序会议OA系统
  • CICD:Circle CI 实现CICD
  • 竞赛 深度学习YOLO安检管制物品识别与检测 - python opencv
  • 【华为OD机试python】斗地主之顺子【2023 B卷|100分】
  • ant design DatePicker禁用之前的时间
  • C语言---预处理详解
  • 数组和对象有什么区别?
  • 顺序表(第二节)实现和解析
  • Hadoop3教程(二十一):MapReduce中的压缩
  • 04、RocketMQ -- 核心基础使用
  • mysql中date/datetime类型自动转go的时间类型time.Time
  • MATLAB算法实战应用案例精讲-【图像处理】机器视觉(基础篇)
  • LDAP协议工作原理
  • 【Jetpack Compose】BOM是什么?
  • 多域名SSL数字证书是什么呢
  • 杭电oj--求奇数的乘积
  • E053-web安全应用-Brute force暴力破解初级
  • 外汇天眼;VT Markets 赞助玛莎拉蒂MSG Racing电动方程式世界锦标赛
  • 使用vscode + vite + vue3+ element3 搭建vue3脚手架
  • 竞赛 深度学习+opencv+python实现车道线检测 - 自动驾驶
  • spring boot 下载resources下的静态文件为流格式
  • HTML渲染过程
  • [已解决]llegal target for variable annotation
  • nodejs基于vue小型企业银行账目管理系统
  • pointnet和pointnet++点云分割和分类
  • Docker-compose和Consul
  • AFL模糊测试+GCOV覆盖率分析