用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 相关文章推荐
jquery 打开窗口返回值实现代码
Mar 04 Javascript
jQuery.each()用法分享
Jul 31 Javascript
jquery动态加载select下拉框示例代码
Dec 10 Javascript
jquery取子节点及当前节点属性值的方法
Sep 09 Javascript
jQuery中get()方法用法实例
Dec 27 Javascript
jQuery通用的全局遍历方法$.each()用法实例
Jul 04 Javascript
Vue.js路由vue-router使用方法详解
Mar 20 Javascript
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
原生JS进行前后端同构
Apr 22 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
解决Vue router-link绑定事件不生效的问题
Jul 22 Javascript
vant中的toast轻提示实现代码
Nov 04 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
php cout&amp;lt;&amp;lt;的一点看法
2010/01/24 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
Add Formatted Text to a Word Document
2007/06/15 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
详解Python中类的定义与使用
2017/04/11 Python
Python中几种导入模块的方式总结
2017/04/27 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
介绍一下游标
2012/01/10 面试题
七一党建活动方案
2014/01/28 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
亮剑观后感600字
2015/06/05 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
Java异常体系非正常停止和分类
2022/06/14 Java/Android