最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年07月26日 17:09:25   作者:?jiǎn)葱歉哒? 
這篇文章主要介紹了React中組件之間通信的方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(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),拿到子組件傳過來的值

父組件對(duì)應(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>
    );
  }
}

子組件對(duì)應(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ù)都能讀取對(duì)應(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屬性接收,對(duì)應(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ù)流,主要思想是組件不會(huì)改變接收的數(shù)據(jù),只會(huì)監(jiān)聽數(shù)據(jù)的變化,當(dāng)數(shù)據(jù)發(fā)生變化時(shí)它們會(huì)使用接收到的新值,而不是去修改已有的值

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

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

相關(guān)文章

  • React中state屬性案例詳解

    React中state屬性案例詳解

    在React中,state 是一個(gè)用于存儲(chǔ)組件內(nèi)部數(shù)據(jù)的特殊對(duì)象,每個(gè)React組件都可以包含自己的state,我們往往是通過修改state的值來驅(qū)動(dòng)React重新渲染組件,這篇文章主要介紹了React中state屬性,需要的朋友可以參考下
    2023-11-11
  • React.js前端導(dǎo)出Excel的方式

    React.js前端導(dǎo)出Excel的方式

    這篇文章主要為大家介紹了React.js前端導(dǎo)出Excel的方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 使用 React Router Dom 實(shí)現(xiàn)路由導(dǎo)航的詳細(xì)過程

    使用 React Router Dom 實(shí)現(xiàn)路由導(dǎo)航的詳細(xì)過程

    React Router Dom 是 React 應(yīng)用程序中用于處理路由的常用庫(kù),它提供了一系列組件和 API 來管理應(yīng)用程序的路由,這篇文章主要介紹了使用 React Router Dom 實(shí)現(xiàn)路由導(dǎo)航,需要的朋友可以參考下
    2024-03-03
  • React?useEffect不支持async?function示例分析

    React?useEffect不支持async?function示例分析

    這篇文章主要為大家介紹了React?useEffect不支持async?function示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • React視頻播放控制組件Video Controls的實(shí)現(xiàn)

    React視頻播放控制組件Video Controls的實(shí)現(xiàn)

    本文主要介紹了React視頻播放控制組件Video Controls的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • React手寫簽名組件react-signature實(shí)現(xiàn)簽字demo

    React手寫簽名組件react-signature實(shí)現(xiàn)簽字demo

    這篇文章主要為大家介紹了React手寫簽名組件react-signature實(shí)現(xiàn)簽字demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • JavaScript中rem布局在react中的應(yīng)用

    JavaScript中rem布局在react中的應(yīng)用

    這篇文章主要介紹了JavaScript中rem布局在react中的應(yīng)用 的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • React錯(cuò)誤邊界Error Boundaries

    React錯(cuò)誤邊界Error Boundaries

    錯(cuò)誤邊界是一種React組件,這種組件可以捕獲發(fā)生在其子組件樹任何位置的JavaScript錯(cuò)誤,并打印這些錯(cuò)誤,同時(shí)展示降級(jí)UI,而并不會(huì)渲染那些發(fā)生崩潰的子組件樹
    2023-01-01
  • React?props全面詳細(xì)解析

    React?props全面詳細(xì)解析

    props?是?React?組件通信最重要的手段,它在?React?的世界中充當(dāng)?shù)慕巧鞘种匾?。學(xué)好?props?可以使組件間通信更加靈活,同時(shí)文中會(huì)介紹一些?props?的操作技巧,和學(xué)會(huì)如何編寫嵌套組件
    2022-10-10
  • React中如何實(shí)現(xiàn)受控組件與非受控組件

    React中如何實(shí)現(xiàn)受控組件與非受控組件

    在 React 開發(fā)里,組件可分為受控組件和非受控組件,這篇文章將為大家介紹一下它們的實(shí)現(xiàn)原理,方法,區(qū)別,作用和應(yīng)用場(chǎng)景是什么,希望對(duì)大家有所幫助
    2025-03-03

最新評(píng)論

兰州市| 怀柔区| 永新县| 崇阳县| 西平县| 凤山市| 丁青县| 新蔡县| 嘉鱼县| 海原县| 交城县| 辉县市| 九龙县| 金门县| 天全县| 三江| 易门县| 天门市| 渑池县| 金川县| 彭山县| 岳普湖县| 秦皇岛市| 肃宁县| 兴安盟| 壶关县| 垣曲县| 集贤县| 中阳县| 惠水县| 永平县| 临沭县| 海林市| 桃园市| 隆回县| 霍林郭勒市| 霞浦县| 平定县| 新蔡县| 二连浩特市| 白水县|