React入门---事件与数据的双向绑定-9
上一节中,我们是从父组件给子组件传送数据,要实现事件与数据的双向绑定,我们来看如何从子组件向父组件传送数据;
接触之前,我们看一些里面函数绑定的知识:
例:通过点击事件改变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的更多相关文章
- 数据的双向绑定 Angular JS
接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...
- vue.js初级入门之最基础的双向绑定操作
首先在页面引入vue.js以及其他需要用到的或者可能要用到的插件(这里我多引用了bootstrap和jquery) 引用的时候需要注意文件的路径,准备工作这样基本就完成了,下面正式开始入门. vue. ...
- 数据的双向绑定 Angular JS之开端篇
接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...
- vue中如何实现数据的双向绑定
vue中如何实现数据的双向绑定 实现视图变化数据跟着变:分两步,上面get中的为第二步(即再次读取的时候会调用get方法得到之前设置的值,以此来实现动态改变) 由于直接写obj.name = this ...
- vue2.X props 数据传递 实现组件内数据与组件外的数据的双向绑定
vue2.0 禁止 子组件修改父组件数据 在Vue2中组件的props的数据流动改为了只能单向流动,即只能由组件外(调用组件方)通过组件的DOM属性attribute传递props给组件内,组件内只能 ...
- 通过原生js实现数据的双向绑定
通过js实现数据的双向绑定 : Object.defineProperty了解 语法: Object.defineProperty(obj, prop, descriptor) obj 要定义属性的对 ...
- Vue源码解析---数据的双向绑定
本文主要抽离Vue源码中数据双向绑定的核心代码,解析Vue是如何实现数据的双向绑定 核心思想是ES5的Object.defineProperty()和发布-订阅模式 整体结构 改造Vue实例中的dat ...
- 原生js实现数据的双向绑定
原生js实现数据的双向绑定 需要了解的属性是原色js的Object.definePrototype(obj,pop,descript); obj:被构造的对象 pop:被构造的对象的属性,创建对象或修 ...
- JavaScript实现数据的双向绑定
接触到Angulr.js和Vue.js后,提到最多的就是双向绑定 下面将用JavaScript实现数据的双向绑定 <!DOCTYPE html> <html> <head ...
随机推荐
- javaScriptCore 实战 与 小结
源码在这,看不懂的直接撸源码就行,转载声明出处 原生调用JS的大致流程,做了个思维简图 这是代码流程 // JS数据 func getJSVar() { let context: JSContex ...
- 【C语言】printf()函数详解
printf函数称为格式输出函数,其关键字最末一个字母f即为"格式"(format)之意.其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上.在前面的例题中我们已多次使用过这 ...
- loadrunner提高篇-block(块)技术和参数化
Block(块)技术 block(块)技术是应用于在一个脚本中实现不同事务.不同次数循环或不同百分比循环的情况.比如在一个脚本中,登录执行3次,查询执行1次. 使用方法如下: 1.录制一个脚本,包含2 ...
- IDMC制造业ERP业务场景测试之一——硅钢片制造业务流程测试
一.测试地址 硅钢片业务测试数据库地址为:http://www.bonawifi.com,测试数据库名字为SiliconSteelSheet,测试账号:用户名demo ,密码demo 二.业务说明 根 ...
- UNION ALL合表查询
有时候需要连表查询数据,可以使用union all来做合表. 语法: SELECT column_name FROM table1UNION ALLSELECT column_name FROM ta ...
- 【HTML5】选项卡
效果图: HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- First Article
Hello World 愚人节的这天,我在我师傅的引导下,踏上了博客园这条不归路...... 先做下自我介绍,我姓李,木子李,因为本人比较中二,所以大家就叫我李中二吧! 工作是前端开发,目前正在深圳一 ...
- SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除临时表(drop table #tableName)吗?
本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时 ...
- 基本数据结构——堆(Heap)的基本概念及其操作
基本数据结构――堆的基本概念及其操作 小广告:福建安溪一中在线评测系统 Online Judge 在我刚听到堆这个名词的时候,我认为它是一堆东西的集合... 但其实吧它是利用完全二叉树的结构来维护一组 ...
- 手机QQ无法临时会话的解决方案
手机网页发起临时会话: <a href="mqqwpa://im/chat?chat_type=wpa&uin=3355135984&version=1& ...