bindActionCreators作用
个人总结:
讲一下bindActionCreators这个API,
bindActionCreators是要结合mapDispatchToProps来使用的。
mapDispatchToProps函数接收一个函数,这个函数返回一个对象,对象中键是action的名字,值是进行dispatch处理的函数
例:
mapDispatchToProps((dispatch)=>{
return {
action:(data) => dispatch( { type:'add',payload:data } )
/*
通常情况下都用actioncreator来生成action,所以通常是下面的写法:
action:(data) => dispatch( actioncreator(data) )
*/
}
})
由于通常的写法下action都是由actioncreator来生成的,既然所有的都有这样的操作,不如弄个函数来封装一下
于是就有了bindActionCreators,写法变成了这样:
mapDispatchToProps =((dispatch)=>{
return {
action:bindActionCreators({
action1:actionCreator1,
action2:actionCreator2 //这样写的花就不涉及dispatch等操作的明文编写了
})
}
}
进行了mapDispatchToProps操作之后,就可以在props中调用方法了
this.props.action1()
this.props.action2()
就可以直接使用这些方法了。
==========================================================================================================================
原文转载自网络:
问题描述
- 使用react-redux时使用connect方法将store和组件关联在一起,那么connect的第二个参数是mapDispatchToProps
- 在mapDispatchToProps中,第一个参数是dispatch,函数的返回值是一个对象,并且对象中的每一个值都是一个函数,函数都可以通过
this.props.key调用。 - 为什么redux官网上推荐了bindActionCreators,这个有什么作用呢?
- 使用不同的方式写mapDispatchToProps对action工厂函数的要求有什么不同吗
- 如果是异步action该如何使用bindActionCreators呢
问题"
问题解决
A1:和以前的写法对比:
对于dispatch一个同步action,mapDispatchToProps以前写法
connect((state)=> ({order: state.order})),
(dispatch) => ({
getOrder: (data) => dispatch(actionCreator(data))
}))
- mapDispatchToProps函数被调用的时候会传入dispatch这个参数,返回的对象中每个函数中都可以使用这个dispatch去发送一个action对象(注意我们通常使用action的工厂函数action creator构造action对象)因此返回的每一个函数中都会有这样类似操作。那么就可以写一个bindActionCreators将dispacth函数和action构造函数直接结合在一起就可以了。 因此可以换一种写法
connect((state)=> ({order: state.order})),
(dispatch) => ({
actions: bindActionCreators({
action1: actionCreator1,
action2: actionCreator2
}),dispatch)
//等价于
connect((state)=> ({order: state.order})),
(dispatch) => ({
actions: {
action1: () => dispacth(actionCreator1()),
action2: () => dispacth(actionCreator2())
}}))
对于异步action
- 同样可以使用bindActionCreators
- 只要你的action构造函数返回值是一个函数
- 这时候bindActionCreators 会使用dispatch将这个函数发送出去
- 当然reducer不能接受
- 就会被交给中间件redux-thunk处理,这时候返回的函数会在异步操作结束之后被调用并传入dispatch作为参数
因此bindActionCreators可以直接dispacth第一个参数(对象)的返回值
Q2:使用bindActionCreators好处是什么呢?
A2:实际上就是将dispatch直接和action creator结合好然后发出去的这一部分操作给封装成一个函数
Q3:那么使用bindActionCreators如何调用不同的dispacth方法呢?
A3: 如下代码使用this.props.actions是一个对象,其中的每一个item的key就是action creator的function的名字,value就是加了dispatch这个action的function
connect((state)=> ({order: state.order})),
(dispatch) => ({
actions: bindActionCreators({
action1: actionCreator1,
action2: actionCreator2
}),dispatch)
//this.props.actions.action1()
bindActionCreators作用的更多相关文章
- bindActionCreators
在 http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_three_react-redux.html 没有介绍这个,react-red ...
- redux的bindActionCreators
bindActionCreators是redux的一个API,作用是将单个或多个ActionCreator转化为dispatch(action)的函数集合形式. 开发者不用再手动dispatch(ac ...
- if __name__== "__main__" 的意思(作用)python代码复用
if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog http://www.dabu.info/if-__-name__ ...
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
- github中的watch、star、fork的作用
[转自:http://www.jianshu.com/p/6c366b53ea41] 在每个 github 项目的右上角,都有三个按钮,分别是 watch.star.fork,但是有些刚开始使用 gi ...
- web.xml中welcome-file-list的作用
今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...
- web.xml中load-on-startup的作用
如下一段配置,熟悉DWR的再熟悉不过了:<servlet> <servlet-name>dwr-invoker</servlet-name> <ser ...
- SQLSERVER中NULL位图的作用
SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...
- 电容与EMC-电容不同功能时对整板EMC的作用
一般我们的pcb板的器件有很多种类,但是值得特别关注的,很多人都会说是BGA.接口.IC.晶振之类,因为这些都是layout功能模块以及设计难点.然而数量上占绝对优势的器件却是阻容器件,之前围殴阻抗时 ...
随机推荐
- 使用js控制文本超出部分显示省略号
js代码 // 字数限制30字,超出不显示 fontNumber (date) { const length = date.length if (length > 30) { var str = ...
- UVA455 - Periodic Strings(紫书习题3.4)
如果一个字符串可以被某个长度为k的字符串重复多次得到,则称这个字符串的周期为k.例如,字符串"abcabcabcabc"以3为周期(当然,他也以6.12等等为周期). 现在请你编 ...
- php中文乱码处理方法
昨天在本地环境创建了一个文件,文件编码是UTF-8格式,打印一个简单的语句竟然出现了中文乱码,折腾了很久,才找到了原因. 乱码问题 昨天写了一个很简单的php输出中文页面,但是出现了乱码问题,第一反应 ...
- Swoole 同步模式与协程模式的对比
在现代化 PHP 高级开发中,Swoole 为 PHP 带来了更多可能,如:常驻内存.协程,关于传统的 Apache/FPM 模式与常驻内存模式(同步)的巨大差异,之前我做过测试,大家能直观的感受到性 ...
- indy10中idtcpclient的使用问题[和大华电子称数据交换]
在实际事务应用中,多次打开server进行大写.其中遇到一些问题,由于时间关系,没有好好整理,虽然问题解决了, 但原因和其他方法没有去进一步测试. 1.每个单元用本地TidTCPClient变量连接s ...
- 利用Selenium实现图片文件上传的两种方式介绍
在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当 ...
- NYIST 1083 美丽的校园
美丽的校园时间限制:1000 ms | 内存限制:65535 KB难度:3 描述 美丽的校园需要大家维护,作为南工学子,当然有责任! 在计科系门前有n棵树,按一行排列在计科系楼前面,它们在一条直线上, ...
- BA--空调系统一次泵和二次泵区别
通常来说,空调系统是按照满负荷设计的,但实际运行中,满负荷运行的 时间不足 3% ,空调设备绝大部分时间内在远低于额定负荷的情况下运转.在 部分负荷下,虽然冷水机组可以根据实际负荷调节相应的冷量输出, ...
- 菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t
菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...
- 2015.05.18,外语,学习笔记-《Word Power Made Easy》 03 “如何谈论不同从业者”
Prefix Person,nous,etc. Practice,etc. Adjective psyche 精神 psychic ['saikik] adj.精神的n.灵媒 -logos 科研 ps ...