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 相关文章推荐
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
js实现的标题栏新消息闪烁提示效果
Jun 06 Javascript
jquery任意位置浮动固定层插件用法实例
May 29 Javascript
js实现下拉列表选中某个值的方法(3种方法)
Dec 17 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
Jan 28 Javascript
JS模态窗口返回值兼容问题的完美解决方法
May 28 Javascript
详解Jquery Easyui的验证扩展
Jan 09 Javascript
vue通过watch对input做字数限定的方法
Jul 13 Javascript
微信小程序多列选择器range-key使用详解
Mar 30 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
Aug 24 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 Javascript
vue通过数据过滤实现表格合并
Nov 30 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
Syphon 使用方法
2021/03/03 冲泡冲煮
在线短消息收发的程序,不用数据库
2006/10/09 PHP
PHP新手上路(十二)
2006/10/09 PHP
第十四节--命名空间
2006/11/16 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
执行iframe中的javascript方法
2008/10/07 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
vscode 远程调试python的方法
2017/12/01 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
python中的闭包函数
2018/02/09 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
党校毕业心得体会
2014/09/13 职场文书
z-index不起作用
2021/03/31 HTML / CSS
Java基础——Map集合
2022/04/01 Java/Android
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL