欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解React中組件之間通信的方式

 更新時(shí)間:2021年07月26日 17:09:25   作者:喆星高照  
這篇文章主要介紹了React中組件之間通信的方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、是什么

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

  • 組件
  • 通信

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

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

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

組件間通信即指組件通過某種方式來傳遞信息以達(dá)到某個(gè)目的

二、如何通信

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

  • 父組件向子組件傳遞
  • 子組件向父組件傳遞
  • 兄弟組件之間的通信
  • 父組件向后代組件傳遞
  • 非關(guān)系組件傳遞

父組件向子組件傳遞

由于React的數(shù)據(jù)流動(dòng)為單向的,父組件向子組件傳遞是最常見的方式

父組件在調(diào)用子組件的時(shí)候,只需要在子組件標(biāo)簽內(nèi)傳遞參數(shù),子組件通過props屬性就能接收父組件傳遞過來的參數(shù)

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

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

子組件向父組件傳遞

子組件向父組件通信的基本思路是,父組件向子組件傳一個(gè)函數(shù),然后通過這個(gè)函數(shù)的回調(diào),拿到子組件傳過來的值

父組件對應(yīng)代碼如下:

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>
        {/* 向子組件中傳入一個(gè)函數(shù)  */}
        <Child getPrice={this.getItemPrice.bind(this)} />
      </div>
    );
  }
}

子組件對應(yīng)代碼如下:

class Child extends Component {
  clickGoods(e) {
    // 在此函數(shù)中傳入值
    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>
    );
  }
}

兄弟組件之間的通信

如果是兄弟組件之間的傳遞,則父組件作為中間層來實(shí)現(xiàn)數(shù)據(jù)的互通,通過使用父組件傳遞

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>
    );
  }
}

父組件向后代組件傳遞

父組件向后代組件傳遞數(shù)據(jù)是一件最普通的事情,就像全局?jǐn)?shù)據(jù)一樣

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

通過使用React.createContext創(chuàng)建一個(gè)context

 const PriceContext = React.createContext('price')

context創(chuàng)建成功后,其下存在Provider組件用于創(chuàng)建數(shù)據(jù)源,Consumer組件用于接收數(shù)據(jù),使用實(shí)例如下:

Provider組件通過value屬性用于給后代組件傳遞數(shù)據(jù):

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

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

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

Consumer組件:

<PriceContext.Consumer>
    { /*這里是一個(gè)函數(shù)*/ }
    {
        price => <div>price:{price}</div>
    }
</PriceContext.Consumer>

非關(guān)系組件傳遞

如果組件之間關(guān)系類型比較復(fù)雜的情況,建議將數(shù)據(jù)進(jìn)行一個(gè)全局資源管理,從而實(shí)現(xiàn)通信,例如redux。關(guān)于redux的使用后續(xù)再詳細(xì)介紹

三、總結(jié)

由于React是單向數(shù)據(jù)流,主要思想是組件不會改變接收的數(shù)據(jù),只會監(jiān)聽數(shù)據(jù)的變化,當(dāng)數(shù)據(jù)發(fā)生變化時(shí)它們會使用接收到的新值,而不是去修改已有的值

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

到此這篇關(guān)于React中組件之間通信的方式的文章就介紹到這了,更多相關(guān)React組件之間通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redux模塊化拆分reducer函數(shù)流程介紹

    Redux模塊化拆分reducer函數(shù)流程介紹

    Reducer是個(gè)純函數(shù),即只要傳入相同的參數(shù),每次都應(yīng)返回相同的結(jié)果。不要把和處理數(shù)據(jù)無關(guān)的代碼放在Reducer里,讓Reducer保持純凈,只是單純地執(zhí)行計(jì)算,這篇文章主要介紹了Redux拆分reducer函數(shù)流程
    2022-09-09
  • 基于Webpack5 Module Federation的業(yè)務(wù)解耦實(shí)踐示例

    基于Webpack5 Module Federation的業(yè)務(wù)解耦實(shí)踐示例

    這篇文章主要為大家介紹了基于Webpack5 Module Federation的業(yè)務(wù)解耦實(shí)踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • GraphQL在react中的應(yīng)用示例詳解

    GraphQL在react中的應(yīng)用示例詳解

    這篇文章主要為大家介紹了GraphQL在react中的應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • react實(shí)現(xiàn)路由攔截的示例代碼

    react實(shí)現(xiàn)路由攔截的示例代碼

    這篇文章主要介紹react實(shí)現(xiàn)路由攔截的,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-02-02
  • React?狀態(tài)管理工具優(yōu)劣勢示例分析

    React?狀態(tài)管理工具優(yōu)劣勢示例分析

    這篇文章主要為大家介紹了React?狀態(tài)管理工具優(yōu)劣勢示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • IntersectionObserver實(shí)現(xiàn)加載更多組件demo

    IntersectionObserver實(shí)現(xiàn)加載更多組件demo

    這篇文章主要為大家介紹了IntersectionObserver實(shí)現(xiàn)加載更多組件demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • mobx在react hooks中的應(yīng)用方式

    mobx在react hooks中的應(yīng)用方式

    這篇文章主要介紹了mobx在react hooks中的應(yīng)用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • React + Threejs + Swiper 實(shí)現(xiàn)全景圖效果的完整代碼

    React + Threejs + Swiper 實(shí)現(xiàn)全景圖效果的完整代碼

    全景圖效果非常漂亮給人帶來極好的用戶體驗(yàn)效果,那么基于前端開發(fā)如何實(shí)現(xiàn)這種效果呢,下面小編給大家?guī)砹薘eact + Threejs + Swiper 實(shí)現(xiàn)全景圖效果,感興趣的朋友一起看看吧
    2021-06-06
  • React?如何向url中添加參數(shù)

    React?如何向url中添加參數(shù)

    這篇文章主要介紹了React?如何向url中添加參數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React hooks使用規(guī)則和作用

    React hooks使用規(guī)則和作用

    這篇文章主要介紹了react hooks實(shí)現(xiàn)原理,文中給大家介紹了useState dispatch 函數(shù)如何與其使用的 Function Component 進(jìn)行綁定,節(jié)后實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03

最新評論