react 中父组件与子组件双向绑定问题


Posted in Javascript onMay 20, 2019

在项目中我们可能会遇到类似这样的场景,也就是父子组件的双向数据绑定

react 中父组件与子组件双向绑定问题

首先,先把在head中引入react.js、react-dom.js和可选择的babel.js(这里需要注意引用的顺序,react.js必须在react-dom.js之前)

<head>
  <script src="react.js"></script>
  <script src="react-dom.js"></script>
  <script src="babel.js"></script>
</head>

 在body里新建一个挂载点

<body>
  <div id='app'></div>
</body>

然后就可以开始写JSX了,注意script标签需注明type类型为"text/babel"或"text/jsx"

<script tpye='text/babel'>
//父组件
  class Father extends React.Component {
    constructor(props) {
      super(props)
      this.state = {
        fname: '父组件',
        fage: 18,
        key: '' 
      };
    }
    setFname(event) {
      this.setState({fname: event.target.value, key: event.target.value});  //设置fname值为input的value值;key用来监听值是否变化 
} setFage(event) { this.setState({fage: event.target.value, key: event.target.value}) } toData(data) { this.setState({fname: data.name}); this.setState({fage: data.age}); } render() { return ( <div> <table border="1" cellSpacing="0"> <tbody> <tr> <th colSpan="3">父组件数据</th> </tr> <tr> <td>name</td> <td>{this.state.nameFvalue}</td> <td><input value={this.state.fname} onChange={this.setFname.bind(this)}/></td> //受控组件当input值改变时触发方法setFname </tr> <tr> <td>age</td> <td>{this.state.ageFvalue}</td> <td><input value={this.state.fage} onChange={this.setFage.bind(this)}/></td> </tr> </tbody> </table><br>           <br>           //子组件标签里将父组件的数据传递给子组件,在子组件里利用props接收;key值变化时,子组件数据更新
          <Son key={this.state.key} fname={this.state.fname} fage={this.state.fage} toData={this.toData.bind(this)}></Son>  
        </div>
      )
    }
  }<br><br><br> //子组件<br><br> 
class Son extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      sVname: this.props.fname, //将父组件传下来的值赋给sVname
      sVage: this.props.fage  
    }
  }
  sVname(ev) {
    console.log(ev.target)
    this.setState({
      sVname: ev.target.value
    })
  }
  sVage(ev) {
    this.setState({
      sVage: ev.target.value
    })
  }
  toData(data) {
    // console.log(svname)
    this.props.toData(data)
  }
  render() {
    return (
      <div>
        <button onClick={this.toData.bind(this, {name: this.state.sVname, age: this.state.sVage})}>点我传值
        </button>
        <table border="1" cellSpacing="0">
          <tbody>
          <tr>
            <th colSpan="3">子组件数据</th>
          </tr>
          <tr>
            <td>name</td>
            <td>{this.state.sVname}</td>
            <td><input value={this.state.sVname} onChange={this.sVname.bind(this)}/></td>
          </tr>
          <tr>
            <td>age</td>
            <td>{this.state.sVage}</td>
            <td><input value={this.state.sVage} onChange={this.sVage.bind(this)}/></td>
          </tr>
          </tbody>
        </table>
      </div>

    )
  }
}
</script>

总结

以上所述是小编给大家介绍的react 中父组件与子组件双向绑定问题,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
新鲜出炉的js tips提示效果
Apr 03 Javascript
如何正确使用javascript 来进行我们的程序开发
Jun 23 Javascript
smartcrop.js智能图片裁剪库
Oct 14 Javascript
易操作的jQuery表单提示插件
Dec 01 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
Aug 31 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
js 获取图像缩放后的实际宽高,位置等信息
Mar 07 Javascript
vue分页插件的使用方法
Dec 25 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 Javascript
微信小程序利用button控制条件标签的变量问题
Mar 15 Javascript
jquery实现穿梭框功能
Jan 19 jQuery
vue element-ui之怎么封装一个自己的组件的详解
May 20 #Javascript
一文搞懂ES6中的Map和Set
May 20 #Javascript
详解vue 在移动端体验上的优化解决方案
May 20 #Javascript
vue-i18n结合Element-ui的配置方法
May 20 #Javascript
JS实现选项卡效果的代码实例
May 20 #Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 #Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 #Javascript
You might like
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
Python入门篇之函数
2014/10/20 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
基于Pytorch SSD模型分析
2020/02/18 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
Python requests模块session代码实例
2020/04/14 Python
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
C#笔试题
2015/07/14 面试题
龙潭大峡谷导游词
2015/02/10 职场文书
给朋友的赠语
2015/06/23 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python