react組件之間的幾種通信情況


組件之間的幾種通信情況

  • 父組件向子組件通信
  • 子組件向父組件通信
  • 跨級組件通信
  • 沒有嵌套關系組件之間的通信

1,父組件向子組件傳遞

React數據流動是單向的,父組件向子組件通信也是最常見的;父組件通過props向子組件傳遞需要的信息

在引用子組件的時候傳遞,相當於一個屬性,例如:

//父組件
class
Parent extends Component{ state = { msg: 'start' }; render() { return <Child parms={this.state.msg} />; //父組件引用子組件時,將state狀態數據以屬性的方式傳遞給子組件props對象的parms屬性中 } } //子組件 class Child extends Component{
  constructor(...args){
    super(...args); //調用父類的 constructor(x, y),繼承父組件的this對象,這是因為子類沒有自己的this對象,而是繼承父類的this對象,
              //只有render時,可以不用寫,在render函數以外要使用this,就得調用super()方法
  }

  render() {
    return <p>{this.props.parms}</p> //子組件通過this.props.parms使用父組件傳遞過來的值
 } }

 

2,子組件向父組件傳遞

  • 利用回調函數
  • 利用自定義事件機制

子組件通過 調用父組件傳遞到子組件的方法  讓父組件自己去修改自己的狀態值。

父組件向子組件傳遞函數:

 <Child parm={this.state.msg} transMsg={msg=>this.transMsg(msg)}/>
   <Child name={this.state.name} parent={this} /> //將整個this傳遞給子組件
 

子組件調用父組件函數:
this.props.transMsg(parms);

this.props.parent.fn(666);//子組件使用props.parent的整個父組件可以任意調用父組件下的函數

完整代碼:

class Parent extends Component{
 
    constructor(props) {
        super(props);
        state = {
            msg: 'start'
        };
    }
    transMsg(types){
        var newOrders = [];
        for(let type of types){
            if(type)
            alert(type);
        }
        
      }
  render() {
    return <Child parms={this.state.msg} />;
  }
}
class Child extends Component{
    
     constructor(props) {
        super(props);
        // call parent component
        console.log("parms :",this.props.parms);
       this.props.transMsg("hi ~~");
    }
  render() {
    return <p>{this.props.parms}</p>
  }
}

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM