React学习笔记——状态提升

废话少说,直接谈主题,React中的兄弟组件简单通信,就是所谓的状态提升
先定义一个父组件parent和两个子兄弟组件child1和child2。

父组件(父组件因为用到状态,所以考虑用类组件)
import React, { Component } from 'react';
//引入两个子组件
import Child1 from './Child1'
import Child2 from './Child2'
class Parent extends Component {
  constructor(){
    super()
  }
//可以先定义一个空状态data
  state={
    data:''
  }
  //这个data是从child1里面传过来的参数
  onReceiveDataClik = (data)=>{
    return(
   	  //尝试打印子组件1传过来的值
      // console.log(data)
      this.setState({
        data
      })
    )
  }

  render() {
    return (
      <>
      //将onReceiveData 方法传递给child1,
      //每次child调用时都会传过来相应值,
      //这里可以绑定this
        <Child1 onReceiveData = {this.onReceiveDataClik}></Child1>
       //<Child1 onReceiveData = {this.onReceiveDataClik.bind(this)}></Child1>
       //这里是将data传递给child2
        <Child2 data={this.state.data}> </Child2>
      </>
    );
  }
}

export default Parent;
子组件child1(考虑子组件用函数式组件)
import React from 'react';
const Child1 = (props) => {
  return (
  //通过props接受父组件传过来的onReceiveData方法
    <div onClick = {props.onReceiveData.bind(this , 'chen')}>
      child1
    </div>
  );
};

export default Child1;
【重点】状态提升重要的是要考虑怎么把子组件1里面的东西传递给父组件

如果直接这样写,则不能传给父组件参数

 <div onClick = {props.onReceiveData}>

如果直接这样写,则表示直接调用函数,就会直接打印

<div onClick = {props.onReceiveData()}>

所以我们想到需要调用的时候才能调用,这是考虑使用bind,因为bind的原理是返回一个函数,并且不会立即执行,只有调用的时候才执行,这样正好符合我们的需求。

<div onClick = {props.onReceiveData.bind(this , 'chen')}>

子组件child2(考虑子组件用函数式组件)

import React from 'react';
const Child2 = (props) => {
  return (
    <div>
      {
        props.data
      }
    </div>
  );
};

export default Child2;
效果

在这里插入图片描述
点击之后
在这里插入图片描述
可以发现,子组件1里面的绑定的东西,传递到了子组件2里面。

好了,没有废话,总结完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值