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

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

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

export default class ComponentFooter extends React.Component{
constructor(){
super();
this.state = {
username:"azedada",
age:24
}
} //事件函数 改变state的age
changeAge(){
this.setState({age:18})
} render(){
return(
<div>
<h1>这里是底部</h1>
<p>{this.state.username}:{this.state.age},{this.props.userId}</p>
{/*这里写点击事件,注意写法是es6*/}
<input type="button" value="点击改变年龄" onClick={this.changeAge.bind(this)}/>
</div>
)
}
//运行结果 24变为18
}

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

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

例:这个子页面是bodychild.js

import React from 'react';

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

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

下面是父页面BodyIndex.js

import React from 'react';
import ReactDOM from 'react-dom';
//将子页面bodychild引用进来
import BodyChild from './bodychild.js'; export default class BodyIndex extends React.Component{
constructor(){
super();
this.state = {username : "azedada"} } //定义事件函数,通过子页面bodychild对username的改变,将显示出来的username改变;
changeUsername(event){
this.setState({username:event.target.value})
} render(){
return(
<div>
<h1>这里是主体容部分</h1>
{/*显示主页面的username的值*/}
<p>username:{this.state.username}</p>
{/*下面是子页面组件,在这里输入内容,将改变username的值*/}
<BodyChild changeUsername={this.changeUsername.bind(this)}/>
</div>
)
}
}

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

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

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

import React from 'react';
import ReactDOM from 'react-dom';
//将子页面bodychild引用进来
import BodyChild from './bodychild.js'; export default class BodyIndex extends React.Component{
constructor(){
super();
this.state = {username : "azedada"} }
//父组件点击事件
recover(str){
this.setState({username:str})
} //定义子组件事件函数,通过子页面bodychild对username的改变,将显示出来的username改变;
changeUsername(event){
this.setState({username:event.target.value})
} render(){
return(
<div>
<h1>这里是主体容部分</h1>
{/*显示主页面的username的值*/}
<p>username:{this.state.username}</p>
{/*下面是子页面组件,在这里输入内容,将改变username的值*/}
<BodyChild changeUsername={this.changeUsername.bind(this)}/>
{/*点击将username变为"azedada",在bind()进行传参*/}
<input type="button" value="点击恢复" onClick={this.recover.bind(this,"azedada")}/>
</div>
)
}
}

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. UNION ALL合表查询

    有时候需要连表查询数据,可以使用union all来做合表. 语法: SELECT column_name FROM table1UNION ALLSELECT column_name FROM ta ...

  2. 3.Maven坐标和依赖

    1.1 何为Maven坐标 正如之前所说的,Maven的一大功能就是管理项目依赖.为了能自动化地解析任何一个Java构件,Maven就必须将它们唯一标识,这就依赖管理的底层基础——坐标. 1.2 坐标 ...

  3. JavaWeb总结(六)—Session

    一.Session的介绍 在Web开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器 ...

  4. 最小函数值 洛谷P2085

    题目描述:          有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个( ...

  5. Xamarin GitHub 下载的源码运行不了

     初学Xamarin ,各种折腾,大概这公司破电脑配置差,老是很多问题. GitHub 真是个好东西,可以参考别人做的,不过下载来运行不了就各种折腾了,为此我重装电脑两次了,反正win10安装就十几分 ...

  6. 【Linux Tips】登陆,提示符,别名

    1.Linux 的tty界面下的登陆界面设置 看了半天发现,原来每次ctrl+alt+F1进入的tty1刚开始显示的就是初始化的登陆界面,顿时有种想装扮下他的冲动,因为实在是太简单了点,不过我是个喜欢 ...

  7. sptt规范介绍

    相关资源 如何开发sptt工程的原子操作 移动端测试方案--sptt sptt规范 一个标准的sptt工程的目录如下: [sptt-project] | -- [ios] | | -- [atoms] ...

  8. STM32实战应用(一)——1602蓝牙时钟1液晶的显示测试

    前言 从51到STM32F4学习这么久了,总算找到点头绪了,目前学习了GPIO,中断,定时器,看门狗的基本使用,所以想试着看看能不能做个什么东西,就是想复习一下最近学习的知识.正好上学期单片机课程设计 ...

  9. 安卓Native和H5页面进行交互

    安卓Native和H5页面进行交互 1.H5页面调用安卓Native界面 1)通过给webView添加JsInterface,安卓提供接口,让H5来进行调用    a)安卓写一个类,里面的方法需要用通 ...

  10. css代码实现

    纯 CSS 实现下面我们探讨下,使用纯 CSS 的方式能否实现. hover 伪类实现 使用 hover 伪类,在鼠标悬停在按钮上面时,控制动画样式的暂停. 关键代码如下: <div class ...