个人总结:

讲一下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作用的更多相关文章

  1. bindActionCreators

    在 http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_three_react-redux.html 没有介绍这个,react-red ...

  2. redux的bindActionCreators

    bindActionCreators是redux的一个API,作用是将单个或多个ActionCreator转化为dispatch(action)的函数集合形式. 开发者不用再手动dispatch(ac ...

  3. if __name__== "__main__" 的意思(作用)python代码复用

    if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog  http://www.dabu.info/if-__-name__ ...

  4. (转载)linux下各个文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...

  5. github中的watch、star、fork的作用

    [转自:http://www.jianshu.com/p/6c366b53ea41] 在每个 github 项目的右上角,都有三个按钮,分别是 watch.star.fork,但是有些刚开始使用 gi ...

  6. web.xml中welcome-file-list的作用

    今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...

  7. web.xml中load-on-startup的作用

    如下一段配置,熟悉DWR的再熟悉不过了:<servlet>   <servlet-name>dwr-invoker</servlet-name>   <ser ...

  8. SQLSERVER中NULL位图的作用

    SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...

  9. 电容与EMC-电容不同功能时对整板EMC的作用

    一般我们的pcb板的器件有很多种类,但是值得特别关注的,很多人都会说是BGA.接口.IC.晶振之类,因为这些都是layout功能模块以及设计难点.然而数量上占绝对优势的器件却是阻容器件,之前围殴阻抗时 ...

随机推荐

  1. 在wamp中直接进入项目

    这个问题困扰了我很久, 暂时我解决了一半. 进入localhost的页面如图一: 可以看到 我有两个projects,但是点击后会直接转跳到这样的页面 例如点击phyfitness_proj,如图二所 ...

  2. POJ3984-迷宫问题【BFS】

    定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...

  3. 基于Tags的简单内容推荐的实现

    原来为了简单方便,自己小网站上的文章页的相关内容推荐就是从数据库里随机抽取数据来填充一个列表,所以一点相关性都没有,更本没有办法引导用户去访问推荐内容. 算法选择 如何能做到相似内容的推荐呢,碍于小网 ...

  4. rtsp://admin:12345@192.168.1.198/mpeg4/main/ch01/av_stream

    rtsp://admin:12345@192.168.1.198/mpeg4/main/ch01/av_stream

  5. SpringBoot-CommandLineRunner实现预操作

    前提:在使用SpringBoot构建项目时,我们通常需要做一些预先操作(类似开机自启动).而SpringBoot正好提供了一个简单的方式来实现–CommandLineRunner. CommandLi ...

  6. Oracle学习总结(6)—— SQL注入技术

    不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一. SQL注入基 ...

  7. Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源

    深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...

  8. Java 学习(9):java Stream & File & IO

    Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...

  9. 带有public static void main方法的类,其中的成员变量必须是static的,否则main方法没法调用。除非是main里的局部变量。因为main方法就是static的啊。

    带有public static void main方法的类,其中的成员变量必须是static的,否则main方法没法调用.除非是main里的局部变量.因为main方法就是static的啊.

  10. 【解决方法】UITableView 性能优化笔记

    1.网络图片异步载入,SDWebImage. 2.文字直接 drawInRect/drawAtPoint 绘制,參考 ABTableViewCell.AdvancedTableViewCells. 3 ...