亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

React中組件之間通信的方式是什么

發布時間:2021-07-27 10:43:06 來源:億速云 閱讀:143 作者:chen 欄目:開發技術

本篇內容介紹了“React中組件之間通信的方式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

React中組件之間通信的方式是什么

一、是什么

我們將組件間通信可以拆分為兩個詞:

  • 組件

  • 通信

回顧Vue系列的文章,組件是vue中最強大的功能之一,同樣組件化是React的核心思想

相比vueReact的組件更加靈活和多樣,按照不同的方式可以分成很多類型的組件

而通信指的是發送者通過某種媒體以某種格式來傳遞信息到收信者以達到某個目的,廣義上,任何信息的交通都是通信

組件間通信即指組件通過某種方式來傳遞信息以達到某個目的

二、如何通信

組件傳遞的方式有很多種,根據傳送者和接收者可以分為如下:

  • 父組件向子組件傳遞

  • 子組件向父組件傳遞

  • 兄弟組件之間的通信

  • 父組件向后代組件傳遞

  • 非關系組件傳遞

父組件向子組件傳遞

由于React的數據流動為單向的,父組件向子組件傳遞是最常見的方式

父組件在調用子組件的時候,只需要在子組件標簽內傳遞參數,子組件通過props屬性就能接收父組件傳遞過來的參數

function EmailInput(props) {
  return (
    <label>
      Email: <input value={props.email} />
    </label>
  );
}

const element = <EmailInput email="123124132@163.com" />;

子組件向父組件傳遞

子組件向父組件通信的基本思路是,父組件向子組件傳一個函數,然后通過這個函數的回調,拿到子組件傳過來的值

父組件對應代碼如下:

class Parents extends Component {
  constructor() {
    super();
    this.state = {
      price: 0
    };
  }

  getItemPrice(e) {
    this.setState({
      price: e
    });
  }

  render() {
    return (
      <div>
        <div>price: {this.state.price}</div>
        {/* 向子組件中傳入一個函數  */}
        <Child getPrice={this.getItemPrice.bind(this)} />
      </div>
    );
  }
}

子組件對應代碼如下:

class Child extends Component {
  clickGoods(e) {
    // 在此函數中傳入值
    this.props.getPrice(e);
  }

  render() {
    return (
      <div>
        <button onClick={this.clickGoods.bind(this, 100)}>goods1</button>
        <button onClick={this.clickGoods.bind(this, 1000)}>goods2</button>
      </div>
    );
  }
}

兄弟組件之間的通信

如果是兄弟組件之間的傳遞,則父組件作為中間層來實現數據的互通,通過使用父組件傳遞

class Parent extends React.Component {
  constructor(props) {
    super(props)
    this.state = {count: 0}
  }
  setCount = () => {
    this.setState({count: this.state.count + 1})
  }
  render() {
    return (
      <div>
        <SiblingA
          count={this.state.count}
        />
        <SiblingB
          onClick={this.setCount}
        />
      </div>
    );
  }
}

父組件向后代組件傳遞

父組件向后代組件傳遞數據是一件最普通的事情,就像全局數據一樣

使用context提供了組件之間通訊的一種方式,可以共享數據,其他數據都能讀取對應的數據

通過使用React.createContext創建一個context

 const PriceContext = React.createContext('price')

context創建成功后,其下存在Provider組件用于創建數據源,Consumer組件用于接收數據,使用實例如下:

Provider組件通過value屬性用于給后代組件傳遞數據:

<PriceContext.Provider value={100}>
</PriceContext.Provider>

  如果想要獲取Provider傳遞的數據,可以通過Consumer組件或者或者使用contextType屬性接收,對應分別如下:

class MyClass extends React.Component {
  static contextType = PriceContext;
  render() {
    let price = this.context;
    /* 基于這個值進行渲染工作 */
  }
}

Consumer組件:

<PriceContext.Consumer>
    { /*這里是一個函數*/ }
    {
        price => <div>price:{price}</div>
    }
</PriceContext.Consumer>

非關系組件傳遞

如果組件之間關系類型比較復雜的情況,建議將數據進行一個全局資源管理,從而實現通信,例如redux。關于redux的使用后續再詳細介紹

三、總結

由于React是單向數據流,主要思想是組件不會改變接收的數據,只會監聽數據的變化,當數據發生變化時它們會使用接收到的新值,而不是去修改已有的值

因此,可以看到通信過程中,數據的存儲位置都是存放在上級位置中

“React中組件之間通信的方式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双柏县| 长兴县| 安阳市| 台中县| 龙井市| 眉山市| 中方县| 运城市| 和顺县| 疏勒县| 平舆县| 乌兰浩特市| 邯郸县| 临洮县| 滨州市| 静安区| 奉节县| 万宁市| 惠水县| 营口市| 五常市| 重庆市| 清苑县| 东阳市| 余干县| 诸城市| 荣昌县| 蒙山县| 和田市| 乌鲁木齐县| 九龙城区| 松溪县| 新化县| 栖霞市| 商水县| 平和县| 库伦旗| 呼伦贝尔市| 成安县| 镇坪县| 兰考县|