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 相关文章推荐
javascript jQuery插件练习
Dec 24 Javascript
Prototype Function对象 学习
Jul 12 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
Nov 09 Javascript
JavaScript学习笔记(一) js基本语法
Oct 25 Javascript
jquery插件推荐浏览器嗅探userAgent
Nov 09 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
May 07 Javascript
详解Bootstrap glyphicons字体图标
Jan 04 Javascript
简介AngularJS中$http服务的用法
Feb 06 Javascript
jQuery事件绑定用法详解
Sep 08 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
Vue项目开发常见问题和解决方案总结
Sep 11 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
CI框架Session.php源码分析
2014/11/03 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
详解python中字典的循环遍历的两种方式
2017/02/07 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
全面分析Python的优点和缺点
2018/02/07 Python
python使用Tesseract库识别验证
2018/03/21 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
食品销售计划书
2014/04/26 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
节水宣传标语口号
2015/12/26 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB