上一节中,我们是从父组件给子组件传送数据,要实现事件与数据的双向绑定,我们来看如何从子组件向父组件传送数据;

接触之前,我们看一些里面函数绑定的知识:

例:通过点击事件改变state的age属性值:

  1. export default class ComponentFooter extends React.Component{
  2. constructor(){
  3. super();
  4. this.state = {
  5. username:"azedada",
  6. age:24
  7. }
  8. }
  9.  
  10. //事件函数 改变state的age
  11. changeAge(){
  12. this.setState({age:18})
  13. }
  14.  
  15. render(){
  16. return(
  17. <div>
  18. <h1>这里是底部</h1>
  19. <p>{this.state.username}:{this.state.age},{this.props.userId}</p>
  20. {/*这里写点击事件,注意写法是es6*/}
  21. <input type="button" value="点击改变年龄" onClick={this.changeAge.bind(this)}/>
  22. </div>
  23. )
  24. }
  25. //运行结果 24变为18
  26. }

接下来,我们看如何从子组件向父组件传送数据,

建立一个BodyIndex的子组件:bodychild,现在做的是在子组件bodychild更改的内容立马反馈更新到BodyIndex;

例:这个子页面是bodychild.js

  1. import React from 'react';
  2.  
  3. export default class BodyChild extends React.Component{
  4. render(){
  5. return(
  6. <div>
  7. {/*子页面向父页面传递参数,只能通过事件的形式,调用父页面props传过来的参数,这个参数是一个事件函数
  8. 我们在父页面定义这个函数,并且接收原生函数定义好的event这个参数*/}
  9. <p>子页面输出:<input type='text' onChange={this.props.changeUsername}/></p>
  10. </div>
  11. )
  12. }
  13. }

重点:子页面向父页面传递参数,只能通过事件的形式,调用父页面props传过来的参数,这个参数是一个事件函数;我们在父页面定义这个函数,并且接收原生函数定义好的event这个参数;

下面是父页面BodyIndex.js

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. //将子页面bodychild引用进来
  4. import BodyChild from './bodychild.js';
  5.  
  6. export default class BodyIndex extends React.Component{
  7. constructor(){
  8. super();
  9. this.state = {username : "azedada"}
  10.  
  11. }
  12.  
  13. //定义事件函数,通过子页面bodychild对username的改变,将显示出来的username改变;
  14. changeUsername(event){
  15. this.setState({username:event.target.value})
  16. }
  17.  
  18. render(){
  19. return(
  20. <div>
  21. <h1>这里是主体容部分</h1>
  22. {/*显示主页面的username的值*/}
  23. <p>username:{this.state.username}</p>
  24. {/*下面是子页面组件,在这里输入内容,将改变username的值*/}
  25. <BodyChild changeUsername={this.changeUsername.bind(this)}/>
  26. </div>
  27. )
  28. }
  29. }

以上就是子组件向父组件传送数据;

扩展:在子组件可以向父组件传送数据的时候,父组件通过点击事件,实现将这个数据改为定值,如何操作:

添加点击事件,进行传参即可:

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. //将子页面bodychild引用进来
  4. import BodyChild from './bodychild.js';
  5.  
  6. export default class BodyIndex extends React.Component{
  7. constructor(){
  8. super();
  9. this.state = {username : "azedada"}
  10.  
  11. }
  12. //父组件点击事件
  13. recover(str){
  14. this.setState({username:str})
  15. }
  16.  
  17. //定义子组件事件函数,通过子页面bodychild对username的改变,将显示出来的username改变;
  18. changeUsername(event){
  19. this.setState({username:event.target.value})
  20. }
  21.  
  22. render(){
  23. return(
  24. <div>
  25. <h1>这里是主体容部分</h1>
  26. {/*显示主页面的username的值*/}
  27. <p>username:{this.state.username}</p>
  28. {/*下面是子页面组件,在这里输入内容,将改变username的值*/}
  29. <BodyChild changeUsername={this.changeUsername.bind(this)}/>
  30. {/*点击将username变为"azedada",在bind()进行传参*/}
  31. <input type="button" value="点击恢复" onClick={this.recover.bind(this,"azedada")}/>
  32. </div>
  33. )
  34. }
  35. }

React入门---事件与数据的双向绑定-9的更多相关文章

  1. 数据的双向绑定 Angular JS

    接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...

  2. vue.js初级入门之最基础的双向绑定操作

    首先在页面引入vue.js以及其他需要用到的或者可能要用到的插件(这里我多引用了bootstrap和jquery) 引用的时候需要注意文件的路径,准备工作这样基本就完成了,下面正式开始入门. vue. ...

  3. 数据的双向绑定 Angular JS之开端篇

    接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...

  4. vue中如何实现数据的双向绑定

    vue中如何实现数据的双向绑定 实现视图变化数据跟着变:分两步,上面get中的为第二步(即再次读取的时候会调用get方法得到之前设置的值,以此来实现动态改变) 由于直接写obj.name = this ...

  5. vue2.X props 数据传递 实现组件内数据与组件外的数据的双向绑定

    vue2.0 禁止 子组件修改父组件数据 在Vue2中组件的props的数据流动改为了只能单向流动,即只能由组件外(调用组件方)通过组件的DOM属性attribute传递props给组件内,组件内只能 ...

  6. 通过原生js实现数据的双向绑定

    通过js实现数据的双向绑定 : Object.defineProperty了解 语法: Object.defineProperty(obj, prop, descriptor) obj 要定义属性的对 ...

  7. Vue源码解析---数据的双向绑定

    本文主要抽离Vue源码中数据双向绑定的核心代码,解析Vue是如何实现数据的双向绑定 核心思想是ES5的Object.defineProperty()和发布-订阅模式 整体结构 改造Vue实例中的dat ...

  8. 原生js实现数据的双向绑定

    原生js实现数据的双向绑定 需要了解的属性是原色js的Object.definePrototype(obj,pop,descript); obj:被构造的对象 pop:被构造的对象的属性,创建对象或修 ...

  9. JavaScript实现数据的双向绑定

    接触到Angulr.js和Vue.js后,提到最多的就是双向绑定 下面将用JavaScript实现数据的双向绑定 <!DOCTYPE html> <html> <head ...

随机推荐

  1. dispaly属性,position属性

    position:absolute;绝对定位相对于父元素(父元素设为relative) position:relative;相对定位相对于自己 position:fixed;固定定位相对于浏览器 di ...

  2. IOS开发创建开发证书及发布App应用(二)——创建证书

    2. 创建证书 证书分为两种,一种是开发者证书,主要是用来真机调试的 另一种就是发布证书,就是用来发布应用的, 最好是两种都要下载,不然编译时候可能报错,我猜想可能苹果怕你没用真机调试 创建证书分为两 ...

  3. Node.js 安装配置介绍

    Node.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v6.10.1 LTS(长期支持版本)版本为例. Node.js安装 ...

  4. C#委托冒泡

    委托的实现,就是编译器自行定义了一个类:有三个重要参数1.制定操作对象,2.指定委托方法3.委托链 看如下一个列子: class DelegatePratice { public static voi ...

  5. JavaScript 简易版 自动轮播 手动轮播 菜鸟交流

    本人刚刚接触前端,许多知识还不了解,以前经常到博客园查询自己需要的东西,现在也终于反客为主了.作为新手,所展示的东西也是浅显易懂,希望同是新手的伙伴们共同交流.共同进步,若是成功捕获一位大大,也请您赐 ...

  6. Lambda&Java多核编程-7-类型检查

    本篇主要介绍Lambda的类型检查机制以及周边的一些知识. 类型检查 在前面的实践中,我们发现表达式的类型能够被上下文所推断.即使同一个表达式,在不同的语境下也能够被推断成不同类型. 这几天在码一个安 ...

  7. Linux:一位猫奴的意外产物

    作者:Vamei,严禁任何形式转载. 1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘.他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿 ...

  8. 用Rvm安装Ruby,Rails运行环境及常见错误解决方法

    一.安装Rvm 1.下载安装Rvm $ curl -L https://get.rvm.io | bash -s stable 此时可能出现错误:"gpg: 无法检查签名:找不到公钥&quo ...

  9. How to trace the Geolocation of network traffic

    A case about suspicious malware App. A forensic examiner capatured some pcap files and he'd to know ...

  10. MAC Mysql 重置密码

    使用mac电脑,当mysql登录密码忘记时,需要重置密码.步骤如下: 1. 关闭当前正在运行的mysql进程. A.进入"偏好设置",选择mysql, 再选"stop m ...