将redux中的state与react中组件中的属性或者方法作绑定。

1、createConnect

作为高阶函数,创建Connect。

function createConnect({connectHOC = connectAdvanced,mapStateToPropsFactories = defaultMapStateToPropsFactories,mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories,mergePropsFactories = defaultMergePropsFactories,selectorFactory = defaultSelectorFactory,} = {})

参数为对象,包含了connectHOC, mapStateToPropsFactories, mapDispatchToPropsFactories, mergePropsFactories和selectorFactory。其中connectHOC是用于连接高阶组件,mapStateToPropsFactories为属性映射工厂,mapDispatchToPropsFactories为分发映射工厂,mergePropsFactories为合并属性工厂。

mapStateToPropsFactories工厂主要包含两个

[whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing]

mapDispatchToPropsFactories分发工厂包含三个

[

whenMapDispatchToPropsIsFunction,

whenMapDispatchToPropsIsMissing,

whenMapDispatchToPropsIsObject

]

createConnect会返回connect函数。

function connect(mapStateToProps,mapDispatchToProps,mergeProps,{pure = true,areStatesEqual = strictEqual,areOwnPropsEqual = shallowEqual,areStatePropsEqual = shallowEqual,areMergedPropsEqual = shallowEqual,...extraOptions} = {}) {const initMapStateToProps = match(mapStateToProps,mapStateToPropsFactories,'mapStateToProps')const initMapDispatchToProps = match(mapDispatchToProps,mapDispatchToPropsFactories,'mapDispatchToProps')const initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps')return connectHOC(selectorFactory, {// used in error messagesmethodName: 'connect',// used to compute Connect's displayName from the wrapped component's displayName.getDisplayName: (name) => `Connect(${name})`,// if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changesshouldHandleStateChanges: Boolean(mapStateToProps),// passed through to selectorFactoryinitMapStateToProps,initMapDispatchToProps,initMergeProps,pure,areStatesEqual,areOwnPropsEqual,areStatePropsEqual,areMergedPropsEqual,// any extra options args can override defaults of connect or connectAdvanced...extraOptions,})}

2、wrapMapToPropsFunc

whenMapStateToPropsIsFunction和whenMapDispatchToPropsIsFunction都会调用wrapMapToPropsFunc。返回initProxySelector函数,创建proxy对象,处理属性映射

function initProxySelector(dispatch, { displayName }) {const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {return proxy.dependsOnOwnProps? proxy.mapToProps(stateOrDispatch, ownProps): proxy.mapToProps(stateOrDispatch)}// allow detectFactoryAndVerify to get ownPropsproxy.dependsOnOwnProps = trueproxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch,ownProps) {proxy.mapToProps = mapToPropsproxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)let props = proxy(stateOrDispatch, ownProps)if (typeof props === 'function') {proxy.mapToProps = propsproxy.dependsOnOwnProps = getDependsOnOwnProps(props)props = proxy(stateOrDispatch, ownProps)}if (process.env.NODE_ENV !== 'production')verifyPlainObject(props, displayName, methodName)return props}return proxy}

3、connectHOC

对组件作封装,实际函数是connectAdvanced,返回函数wrapWithConnect

4、whenMapDispatchToPropsIsObject

当mapDispatchToProps为对象时,mapDispatchToPropsFactories使用的是whenMapDispatchToPropsIsObject,绑定action的创建者,并且分发

function bindActionCreators(actionCreators, dispatch) {const boundActionCreators = {}for (const key in actionCreators) {const actionCreator = actionCreators[key]if (typeof actionCreator === 'function') {boundActionCreators[key] = (...args) => dispatch(actionCreator(...args))}}return boundActionCreators
}
												

react-redux中的connect相关推荐

  1. Redux中的功能式React式编程简介

    by Bhuvan Malik 通过布凡·马利克(Bhuvan Malik) Redux中的功能式React式编程简介 (An introduction to functional Reactive ...

  2. 使用react+redux+react-redux+react-router+axios+scss技术栈从0到1开发一个applist应用

    先看效果图 github地址 github仓库 在线访问 初始化项目 #创建项目 create-react-app applist #如果没有安装create-react-app的话,先安装 npm ...

  3. React + Redux

    相当长一段时间以来,我一直在React和Redux中实现应用程序.在过去的几年里,我写了两本关于它的电子书,并发布了学习React及其生态系统的课程平台.课程平台甚至内置在React和Redux中.我 ...

  4. 优雅的在React项目中使用Redux

    概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...

  5. 如何优雅地在React项目中使用Redux

    前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...

  6. 优雅的在React项目中使用Redux 1

    或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使 ...

  7. react redux在项目中的使用

    一开始我接触到redux是很懵的,看官方文档也很枯燥乏味,不理解说的什么意思,也是看过就忘,所以就结合公司的项目来熟悉一下redux.也可能有写的不对的地方,欢迎指出. 一.构建reducer 首先看 ...

  8. 如何在React Native中使用Redux Saga监视网络更改

    by Pritish Vaidya 通过Pritish Vaidya 如何在React Native中使用Redux Saga监视网络更改 (How to monitor network change ...

  9. 【React】redux中引入createStore有删除线

    redux中引入createStore有删除线 如下图 鼠标移进去看了一下发现,具体内容是 使用了弃用的符号,请查阅文档,以获取更好的替代性 解决方法 1.根据提示把import换成 import { ...

  10. React+Redux开发实录(一)搭建工程脚手架

    React+Redux开发实录(一)搭建工程脚手架 React+Redux开发实录(二)React技术栈一览 搭建工程脚手架 准备工作 安装node 安装git 安装一款前端IDE 推荐VSCode, ...

最新文章

  1. Linux / CentOs 7搭建DHCP服务
  2. 第十五章 深入分析iBatis框架之系统架构与映射原理(待续)
  3. 2017年10大年度最佳的ICO项目
  4. 华为鸿蒙2.0操作页面,华为鸿蒙2.0开面界面确认,这一变化你可懂
  5. 设计模式学习笔记——享元(Flyweight)模式
  6. hbuild 编译 php,Hbuilder的PHP环境搭建
  7. python视频 神经网络 Tensorflow
  8. 27留数及其应用(三)
  9. 数组赋偶数值并求出平均值
  10. ASP.NET FileUpload用法
  11. java怎么获得今天日期,java怎么获取两年后的今天的日期
  12. Android开发自定义水印图片
  13. win10 往vmware 黑苹果系统无法拖拽复制问题
  14. React 调和(Reconciler)原理理解
  15. 互换性测量技术-几何误差
  16. 双十一哪款蓝牙耳机值得入手?音质超棒的蓝牙耳机推荐
  17. appium手机APP自动化定位元素
  18. 用float/double定义可以输入整数
  19. 蓝牙鼠标卡顿,蓝牙与wifi冲突解决方式
  20. UVa1647 Computer Transformation

热门文章

  1. 【BZOJ4236】JOIOJI [DP]
  2. stop words list
  3. PHP获取当前时间、时间戳的各种格式写法汇总[日期时间]
  4. JoshChen判断是否微信内置浏览器访问【转载】
  5. 装个Redmine真是麻烦啊
  6. 反流技术之IE插件技术研究
  7. 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...
  8. python第三方库排行-140种Python标准库、第三方库和外部工具
  9. python运行非常慢的解决-python执行太慢
  10. python教程是什么-python运行环境是什么