用react-redux实现react组件之间数据共享的方法


Posted in Javascript onJune 08, 2018

上篇文章写到了redux实现组件数据共享的方法,但是在react中,redux作者提供了一个更优雅简便的模块实现react组件之间数据共享。那就是利用react-redux

利用react-redux实现react组件数据之间数据共享

1.安装react-redux

$ npm i --save react-redux

2.从react-redux导入Prodiver组件将store赋予Provider的store属性,

将根组件用Provider包裹起来。

import {Provider,connect} from 'react-redux'
ReactDOM.render(
<Provider store={store}>
 <Wrap/>
</Provider>,document.getElementById('example'))

这样根组件中所有的子组件都可以获得store中的值

3.connect二次封装根组件

export default connect(mapStateToProps,mapDispatchToProps)(Wrap)

connect接收两个函数作为参数,一个mapStateToProps定义哪些store属性会被映射到根组件上的属性(把store传入react组件),一个mapDispatchToProps定义哪些行为action可以作为根组件属性(把数据从react组件传入store)

3.定义这两个映射函数

function mapStateToProps(state){
 return {
  name:state.name,
  pass:state.pass
 }
}
function mapDispatchToProps(dispatch){
 
 return {actions:bindActionCreators(actions,dispatch)
 }
}

把store中的name,pass映射到根组件的name,pass属性。

actions是一个包含了action构建函数的对象,用bindActionCreators把对象actions绑定到根组件actions属性上。

4.在根组件引用子组件的位置用 <Show name={this.props.name} pass={this.props.pass}></Show>将store数据传入子组件.

5.在子组件中调用actions中的方法来更新store中的数据

<Input actions={this.props.actions} ></Input>

先将actions作为属性传入子组件

子组件调用actions中的方法创建action

//Input组件
export default class Input extends React.Component{
sure(){
this.props.actions.add({name:this.refs.name.value,pass:this.refs.pass.value})
}
 render(){ 
  return (
    <div> 
  姓名:<input ref="name" type="text"/>
  密码:<input ref="pass" type="text"/>
  <button onClick={this.sure.bind(this)}>登录</button>
 </div>

  )
 }
}

因为我们采用了bindActionCreators函数,创建action后会立即自动调用store.dispatch(action)将数据更新到store.

这样我们就利用react-redux模块完成了react各个组件之间数据共享。

跟上篇文章一样,实现了在一个组件Input中通过actions更新数据到store,然后在另一个组件Show中展示store中的数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
编辑浪子版表单验证类
May 12 Javascript
javascript学习(二)javascript常见问题总结
Jan 02 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
Jan 16 Javascript
JS中Iframe之间传值及子页面与父页面应用
Mar 11 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
详解js闭包
Sep 02 Javascript
javascript正则表达式使用replace()替换手机号的方法
Jan 19 Javascript
AngularJS单选框及多选框实现双向动态绑定
Jan 13 Javascript
Vue实战之vue登录验证的实现代码
Oct 31 Javascript
layui自定义工具栏的方法
Sep 19 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 #Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
Jun 08 #Javascript
原生实现一个react-redux的代码示例
Jun 08 #Javascript
vue项目中使用百度地图的方法
Jun 08 #Javascript
浅谈Vue路由快照实现思路及其问题
Jun 07 #Javascript
JavaScript中click和onclick本质区别与用法分析
Jun 07 #Javascript
jQuery动态移除与增加onclick属性的方法详解
Jun 07 #jQuery
You might like
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
PHP SQLite类
2009/05/07 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP中cookie知识点学习
2018/05/06 PHP
php实现微信支付之退款功能
2018/05/30 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python事件驱动event实现详解
2018/11/21 Python
python 表格打印代码实例解析
2019/10/12 Python
QML用PathView实现轮播图
2020/06/03 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
社区十八大感言
2014/01/19 职场文书
学生会部长竞聘书
2014/03/31 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
药店收银员岗位职责
2015/04/07 职场文书
热血教师观后感
2015/06/10 职场文书
遗失证明范文
2015/06/19 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
Python WSGI 规范简介
2021/04/11 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
浅谈Python中对象是如何被调用的
2022/04/06 Python
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python