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的片段分享
Aug 23 Javascript
JQuery选择器特辑 详细小结
May 14 Javascript
div失去焦点事件实现思路
Apr 22 Javascript
Node.js中HTTP模块与事件模块详解
Nov 14 Javascript
浅析JavaScript中的对象类型Object
May 26 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
Aug 02 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
微信小程序获取循环元素id以及wx.login登录操作
Aug 17 Javascript
vue中axios处理http发送请求的示例(Post和get)
Oct 13 Javascript
JavaScript实现微信号随机切换代码
Mar 09 Javascript
vue中使用element-ui进行表单验证的实例代码
Jun 22 Javascript
解决LayUI表单获取不到data的问题
Aug 20 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知道与问问的采集插件代码
2010/10/12 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
php使用PDO方法详解
2014/12/27 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
Python批量转换文件编码格式
2015/05/17 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
校园十大歌手策划书
2014/02/01 职场文书
第二课堂活动总结
2014/05/07 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
财务稽核岗位职责
2015/04/13 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技