React入门---事件与数据的双向绑定-9

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

接触以前,咱们看一些里面函数绑定的知识:es6

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

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;this

例:这个子页面是bodychild.jsspa

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.jscode

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>
            )
    }    
}

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

 

扩展:在子组件能够向父组件传送数据的时候,父组件经过点击事件,实现将这个数据改成定值,如何操做:事件

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

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>
            )
    }    
}
相关文章
相关标签/搜索