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 相关文章推荐
5秒后跳转效果(setInterval/SetTimeOut)
May 03 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
Aug 26 Javascript
jquery得到font-size属性值实现代码
Sep 30 Javascript
javascript验证只能输入数字和一个小数点示例
Oct 21 Javascript
浅谈JS日期(Date)处理函数
Dec 07 Javascript
jquery获取easyui日期控件的值实现方法
Nov 09 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
Nov 09 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
Jul 13 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
Sep 18 Javascript
node.js基础知识汇总
Aug 25 Javascript
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
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中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
Python的面向对象编程方式学习笔记
2016/07/12 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
Python获取时间戳代码实例
2019/09/24 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
python返回数组的索引实例
2019/11/28 Python
如何理解Python中包的引入
2020/05/29 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
中专生毕业自我鉴定
2013/11/01 职场文书
2015年体育教师个人工作总结
2015/05/12 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
vue使用element-ui按需引入
2022/05/20 Vue.js
 python中的元类metaclass详情
2022/05/30 Python
Go语言编译原理之源码调试
2022/08/05 Golang