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 ...
随机推荐
- dispaly属性,position属性
position:absolute;绝对定位相对于父元素(父元素设为relative) position:relative;相对定位相对于自己 position:fixed;固定定位相对于浏览器 di ...
- IOS开发创建开发证书及发布App应用(二)——创建证书
2. 创建证书 证书分为两种,一种是开发者证书,主要是用来真机调试的 另一种就是发布证书,就是用来发布应用的, 最好是两种都要下载,不然编译时候可能报错,我猜想可能苹果怕你没用真机调试 创建证书分为两 ...
- Node.js 安装配置介绍
Node.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v6.10.1 LTS(长期支持版本)版本为例. Node.js安装 ...
- C#委托冒泡
委托的实现,就是编译器自行定义了一个类:有三个重要参数1.制定操作对象,2.指定委托方法3.委托链 看如下一个列子: class DelegatePratice { public static voi ...
- JavaScript 简易版 自动轮播 手动轮播 菜鸟交流
本人刚刚接触前端,许多知识还不了解,以前经常到博客园查询自己需要的东西,现在也终于反客为主了.作为新手,所展示的东西也是浅显易懂,希望同是新手的伙伴们共同交流.共同进步,若是成功捕获一位大大,也请您赐 ...
- Lambda&Java多核编程-7-类型检查
本篇主要介绍Lambda的类型检查机制以及周边的一些知识. 类型检查 在前面的实践中,我们发现表达式的类型能够被上下文所推断.即使同一个表达式,在不同的语境下也能够被推断成不同类型. 这几天在码一个安 ...
- Linux:一位猫奴的意外产物
作者:Vamei,严禁任何形式转载. 1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘.他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿 ...
- 用Rvm安装Ruby,Rails运行环境及常见错误解决方法
一.安装Rvm 1.下载安装Rvm $ curl -L https://get.rvm.io | bash -s stable 此时可能出现错误:"gpg: 无法检查签名:找不到公钥&quo ...
- 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 ...
- MAC Mysql 重置密码
使用mac电脑,当mysql登录密码忘记时,需要重置密码.步骤如下: 1. 关闭当前正在运行的mysql进程. A.进入"偏好设置",选择mysql, 再选"stop m ...