React的父子组件通信

首先要知道React的组件间通讯是单向的。数组必须是由父级传到子级或者子级传递给父级层层传递。
如果要给兄弟级的组件传递数据,那么就要先传递给父级而后在传递给你要传递到的组件位置。

父级组件向子级组件传递数据

在React中,父组件可以向子组件通过传props的方式,向子组件进行通讯。
父组件 App.js

import React, { Component } from 'react';
import './App.css';
import Child from './child'
export default class App extends Component {
	constructor(props){
	    super(props);
	    this.state={
	        msg:'父类的消息',
	        name:'John',
	        age:99
	    }
	}
    callback=(msg,name,age)=>{
        // setState方法,修改msg的值,值是由child里面传过来的
        this.setState({msg});
        this.setState({name});
        this.setState({age});
    }
	render() {
	 return (
	   <div className="App">
	     <p> Message: &nbsp;&nbsp;{this.state.msg}</p>
	     <Child callback={this.callback} age={this.state.age} name={this.state.name}></Child>
	   </div>
	 );
	}
}

父组件中,state里面有三个属性,分别是msg,name和age,在子组件child中,如果想拿到父组件里面的属性,就需要通过props传递。
在标签里面添加

name = {this.state.name} age = {this.state.age}
写成
<Child name={this.state.name} age={this.state.age}>

name和age分别是你要传递的属性。
子组件 Child

import React from "react";

export default class Child extends React.Component{
	constructor(props){
	     super(props);
	     this.state={
	         name:'Andy',
	         age:31,
	         msg:"来自子类的消息"
	     }
	 }
	change=()=>{
	 	this.props.callback(this.state.msg,this.state.name,this.state.age);
	}
    render(){
        return(
            <div>
                <div>{this.props.name}</div>
                <div>{this.props.age}</div>
                <button onClick={this.change}>点击</button>
            </div>
        )
    }
}

在子组件中,通过 {this.props.name} {this.props.age}就能拿到父组件里面的数据。
React的父子组件通信_第1张图片
呈现在页面上的就是这个样子。

其中 John和99均来自于父组件App.js

子组件向父组件通信

子组件向父组件通信,同样也需要父组件向子组件传递props进行通讯,只是父组件传递的是作用域为父组件自身的函数,子组件调用该函数,将子组件想要传递的信息,作为参数,传递到父组件的作用域中。
上面的例子中,在子组件Child中绑定了onClick事件。调用this.change方法。
注意change函数采用了箭头函数的写法change=() => {},目的是为了改变this的指向。使得在函数单独调用的时候,函数内部的this依然指向child组件。如果不使用箭头函数,而是采用普通的写法则需要在constructor中bind一下。this.change = this.change.bind(this)
或者在onClick方法中绑定this,
onClick={this.change=this.change.bind(this)}

在change方法中,通过props发送出去一个方法,比如说叫callback方法,父组件中去接收这个方法,callback={this.callback},然后在自身的callback函数中进行一系列操作。
本例中,函数callback中就是通过调用setState方法来改变值。
点击按钮后页面显示:
React的父子组件通信_第2张图片
现在我们就已经将父子组件间的通讯问题给解决了,但是如果是同级别的组件间传递如果还是采用props传给父级组件然后再传给子组件这就比较麻烦了,尤其是当项目越来越大的时候。所以这时候我们就可以使用全局的状态管理了Redux。关于Redux的入门介绍请转至 Redux核心知识介绍 处观看。

你可能感兴趣的:(React的专栏)