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 相关文章推荐
基于Asp.net与Javascript控制的日期控件
May 22 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 Javascript
jQuery获取注册信息并提示实现代码
Apr 21 Javascript
动态的创建一个元素createElement及删除一个元素
Jan 24 Javascript
js实现通用的微信分享组件示例
Mar 10 Javascript
JavaScript实现的MD5算法完整实例
Feb 02 Javascript
每日十条JavaScript经验技巧(二)
Jun 23 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
Aug 02 Javascript
JavaScript模块化之使用requireJS按需加载
Apr 12 Javascript
Vue绑定内联样式问题
Oct 17 Javascript
javascript中的相等操作符(==与===区别)
Dec 21 Javascript
Vue切换Tab动态渲染组件的操作
Sep 21 Javascript
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 OPCode缓存 APC详细介绍
2010/10/12 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
express express-session的使用小结
2018/12/12 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
记录Django开发心得
2014/07/16 Python
浅谈Python 对象内存占用
2016/07/15 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
Python中的全局变量如何理解
2020/06/04 Python
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
药剂学专业应届生自荐信
2013/09/29 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
停车场管理协议书范本
2014/10/08 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android