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 ...
随机推荐
- 老李推荐:第1章2节《MonkeyRunner源码剖析》概述:边界
老李推荐:第1章2节<MonkeyRunner源码剖析>概述:边界 边界 怎么样才算分析清楚一个事物的原理是什么呢?就以前面提到的<LINUX内核源代码情景分析>为例子,分 ...
- 关于android混淆文件project.properties和proguard-project.txt详解
一直不明白Android开发中的有些文件的具体作用,后来用到了,具体研究了一下,借鉴了一下网上的资料,最后总结下,方便以后查看! 老版本中有这么个文件default.properties,既然是老版本 ...
- 提交到SVN中的项目被删除 且项目名已经被新建项目占用找回方法
提到项目找回,一看就头疼,找回起来较麻烦.下面就讲一下. 首先,确定项目是否被删除?找项目,太多了,都被找一遍了,还是没找到,看看就头痛,换了个方法,找了个项目的包,xx.apk,反编译下吧,过程略, ...
- JavaScript基础学习(九)—DOM
一.DOM概述 DOM(Document Object Model)文本对象模型. D: 文档,HTML文档或XML文档. O: 对象,document对象的属性和方法. ...
- 原生JavaScript实现焦点图轮播
不管是高校的网站还是电商的页面,焦点图的切换和轮播应该是一项不可或缺的应用.今天把焦点图轮播制作的技术要点做下笔记,以供日后查看. 一.结构层(HTML) 焦点图的HTML结构很简单,就是一个父容器( ...
- 在ASP.NET MVC4中配置Castle
---恢复内容开始--- Castle是针对.NET平台的一个非常优秀的开源项目,重点是开源的哦.它在NHibernate的基础上进一步封装,其原理基本与NHibernate相同,但它较好地解决NHi ...
- 文件系统与linux相关知识点
文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能.对于服务器开发人员,比较关注的是unix(linux)环境下的文件系统,比如分区与磁盘关系,磁盘的剩余空间,文件的类型与权限控制,文 ...
- Java NIO之Buffers
一.前言 在笔者打算学习Netty框架时,发现很有必要先学习NIO,因此便有了本博文,首先介绍的是NIO中的缓冲. 二.缓冲 2.1 层次结构图 除了布尔类型外,其他基本类型都有相对应的缓冲区类,其继 ...
- mac双系统用磁盘工具合并windows分区后,开机还会 出现win分区
如何删除开机硬盘的选择项 打开终端,输入sudo mount -t msdos /dev/disk0s1 /mnt 在Finer中会出现EFI盘,删除其中的Apple文件以外的文件即可(Apple千万 ...
- socket编程之 select、poll、kqueue、epoll
原生API select int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct tim ...