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 相关文章推荐
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
google 搜索框添加关键字实现代码
Apr 24 Javascript
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 Javascript
jQuery的context属性用法实例
Dec 27 Javascript
JavaScript实现将UPC转换成ISBN的方法
May 26 Javascript
jQuery鼠标事件总结
Oct 13 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
Vue.js render方法使用详解
Apr 05 Javascript
vue基于element的区间选择组件
Sep 07 Javascript
koa2+vue实现登陆及登录状态判断
Aug 15 Javascript
纯js实现无缝滚动功能代码实例
Feb 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的历史和优缺点
2006/10/09 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
python之wxPython应用实例
2014/09/28 Python
python简单文本处理的方法
2015/07/10 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
python3 shelve模块的详解
2017/07/08 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
用python绘制樱花树
2020/10/09 Python
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
房产协议书范本
2014/10/18 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技