React的父子组件通信

首先要知道React的组件间通讯是单向的。数据必须是由父级传到子级或者子级传递给父级层层传递。
如果要给兄弟级的组件传递数据,那么就要先传递给公共的父级而后在传递给你要传递到的组件位置。【一般这种不推荐层层传递,可以选择维护全局状态】

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

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

import React, { Component } from 'react';
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,
        	name,
        	age,
        });
    }
	render() {
	 return (
	   <>
	     <p> Message:  {this.state.msg}</p>
	     <Child callback={this.callback} age={this.state.age} name={this.state.name}></Child>
	   </>
	 );
	}
}

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

<Child name={this.state.name} age={this.state.age} />

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

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

在子组件中,通过 {this.props.name} {this.props.age}就能拿到父组件里面的数据。
在这里插入图片描述
呈现在页面上的就是这个样子。

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

子组件向父组件通信

子组件向父组件通信,同样也需要父组件向子组件传递props进行通讯,只是父组件传递的是作用域为父组件自身的函数,子组件调用该函数,将子组件想要传递的信息,作为参数,传递到父组件的作用域中。
上面的例子中,在子组件Child中绑定了onClick事件。调用this.change方法。

注意change函数采用了箭头函数的写法change=() => {},目的是为了改变this的指向。使得在函数单独调用的时候,函数内部的this依然指向child组件。如果不使用箭头函数,而是采用普通的写法则需要在constructor中bind一下。this.change = this.change.bind(this)
或者在onClick方法中绑定this

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

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值