国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【react從入門到精通】React父子組件通信方式詳解(有示例)

這篇具有很好參考價值的文章主要介紹了【react從入門到精通】React父子組件通信方式詳解(有示例)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


【react從入門到精通】React父子組件通信方式詳解(有示例)

人工智能福利文章

  • 【分享幾個國內(nèi)免費可用的ChatGPT鏡像】
  • 【10幾個類ChatGPT國內(nèi)AI大模型】
  • 【用《文心一言》1分鐘寫一篇博客簡直yyds】
  • 【用訊飛星火大模型1分鐘寫一個精美的PPT】

前言

【react從入門到精通】React父子組件通信方式詳解(有示例)

在上一篇文章《JSX詳解》中我們了解了什么是jsx以及jsx的語法規(guī)則。

本文中我們將詳細(xì)了解React父子組件通信方式。

React技能樹

React 技能樹
├── JSX
│   ├── 語法
│   ├── 元素渲染
│   ├── 組件
│   ├── Props
│   ├── State
│   └── 生命周期
├── 組件通信
│   ├── 父子組件通信
│   ├── 兄弟組件通信
│   ├── 跨級組件通信
│   ├── Context
│   └── Redux
├── 樣式
│   ├── 內(nèi)聯(lián)樣式
│   ├── CSS Modules
│   └── Styled Components
├── 路由
│   ├── React Router
│   ├── 動態(tài)路由
│   └── 嵌套路由
├── 數(shù)據(jù)請求
│   ├── Axios
│   ├── Fetch
│   └── GraphQL
├── 狀態(tài)管理
│   ├── Redux
│   ├── MobX
│   └── Recoil
├── 常用庫和框架
│   ├── Ant Design
│   ├── Material UI
│   ├── Bootstrap
│   ├── Semantic UI
│   └── Tailwind CSS
├── 測試
│   ├── Jest
│   ├── Enzyme
│   └── React Testing Library
├── 構(gòu)建工具
│   ├── Webpack
│   └── Parcel
└── 服務(wù)端渲染
    ├── Next.js
    └── Gatsby

通過 props 實現(xiàn)父子組件通信

React 組件之間的數(shù)據(jù)傳遞通常是通過 props 實現(xiàn)的。組件可以將數(shù)據(jù)作為 props 屬性傳遞給其子組件,然后子組件可以使用這些數(shù)據(jù)來進(jìn)行渲染或執(zhí)行操作。

在下面的示例中,我們將展示如何通過 props 實現(xiàn)父子組件之間的通信。

我們創(chuàng)建一個包含兩個組件的簡單 React 應(yīng)用程序:一個父組件 Parent 和一個子組件 Child。父組件有一個按鈕,點擊按鈕將觸發(fā)一個事件,事件將向子組件傳遞一個字符串類型的消息。子組件將通過 props 屬性接收消息并在頁面上顯示。

// Parent.js

import React from 'react';
import Child from './Child';

class Parent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      message: '',
    };

    this.handleButtonClick = this.handleButtonClick.bind(this);
  }

  handleButtonClick() {
    this.setState({
      message: 'Hello from Parent!',
    });
  }

  render() {
    return (
      <div>
        <h1>Parent Component</h1>
        <button onClick={this.handleButtonClick}>Click me</button>
        <Child message={this.state.message} />
      </div>
    );
  }
}

export default Parent;
// Child.js

import React from 'react';

class Child extends React.Component {
  render() {
    return (
      <div>
        <h2>Child Component</h2>
        <p>{this.props.message}</p>
      </div>
    );
  }
}

export default Child;

在上述代碼中,我們創(chuàng)建了一個 Parent 組件和一個 Child 組件,并將 Child 組件作為 Parent 組件的子組件進(jìn)行渲染。

Parent 組件有一個按鈕,并且通過 state 管理一個 message 狀態(tài)。當(dāng)按鈕被點擊時,Parent 組件會更新 message 狀態(tài),然后將 message 作為 props 屬性傳遞給 Child 組件。Child 組件接收 message 屬性并將其顯示在頁面上。

通過 state 實現(xiàn)父子組件通信

在某些情況下,組件之間的通信需要更為復(fù)雜的邏輯。在這種情況下,可以使用組件的狀態(tài)來實現(xiàn)通信。子組件可以通過 props 屬性接收來自父組件的數(shù)據(jù),并將其存儲在自己的狀態(tài)中。然后,子組件可以通過 setState 方法更新自己的狀態(tài),并觸發(fā)重新渲染。

在下面的示例中,我們將展示如何通過狀態(tài)實現(xiàn)父子組件之間的通信。

我們創(chuàng)建一個父組件 Parent 和一個子組件 Child。父組件有一個按鈕,點擊按鈕將觸發(fā)一個事件,事件將更新父組件的狀態(tài)并將其作為 props 屬性傳遞給子組件。子組件將使用接收到的 props 屬性來更新自己的狀態(tài),并在頁面上顯示。

// Parent.js

import React from 'react';
import Child from './Child';

class Parent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      message: '',
    };

    this.handleButtonClick = this.handleButtonClick.bind(this);
  }

  handleButtonClick() {
    this.setState({
      message: 'Hello from Parent!',
    });
  }

  render() {
    return (
      <div>
        <h1>Parent Component</h1>
        <button onClick={this.handleButtonClick}>Click me</button>
        <Child message={this.state.message} />
      </div>
    );
  }
}

export default Parent;
// Child.js

import React from 'react';

class Child extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      message: '',
    };

    this.handleButtonClick = this.handleButtonClick.bind(this);
  }

  handleButtonClick() {
    this.setState({
      message: 'Hello from Child!',
    });
  }

  render() {
    return (
      <div>
        <h2>Child Component</h2>
        <p>{this.props.message}</p>
        <button onClick={this.handleButtonClick}>Click me</button>
        <p>{this.state.message}</p>
      </div>
    );
  }
}

export default Child;

在上述代碼中,我們創(chuàng)建了一個 Parent 組件和一個 Child 組件,并將 Child 組件作為 Parent 組件的子組件進(jìn)行渲染。

Parent 組件有一個按鈕,并且通過 state 管理一個 message 狀態(tài)。當(dāng)按鈕被點擊時,Parent 組件會更新 message 狀態(tài),然后將 message 作為 props 屬性傳遞給 Child 組件。Child 組件接收 message 屬性并將其顯示在頁面上。

同時,Child 組件也有一個按鈕,當(dāng)按鈕被點擊時,Child 組件會更新自己的狀態(tài)并將其顯示在頁面上。

通過回調(diào)函數(shù)實現(xiàn)父子組件通信

有時候,我們需要將子組件中的數(shù)據(jù)傳遞回父組件,以便父組件可以執(zhí)行一些操作或更新自己的狀態(tài)。在這種情況下,可以通過將回調(diào)函數(shù)作為 props 屬性傳遞給子組件來實現(xiàn)通信。子組件可以調(diào)用該回調(diào)函數(shù),并將需要傳遞的數(shù)據(jù)作為參數(shù)傳遞給它。

在下面的示例中,我們將展示如何通過回調(diào)函數(shù)實現(xiàn)父子組件之間的通信。

我們創(chuàng)建一個父組件 Parent 和一個子組件 Child。子組件有一個輸入框,當(dāng)輸入框中的值發(fā)生變化時,子組件將調(diào)用傳遞給它的回調(diào)函數(shù),并將輸入框中的值作為參數(shù)傳遞給它。父組件將接收到傳遞的值,并將其存儲在自己的狀態(tài)中。

// Parent.js

import React from 'react';
import Child from './Child';

class Parent extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            inputValue: '',
        };

        this.handleInputChange = this.handleInputChange.bind(this);
    }

    handleInputChange(value) {
        this.setState({
            inputValue: value,
        });
    }

    render() {
        return (
            <div>
                <h1>Parent Component</h1>
                <Child onInputChange={this.handleInputChange} />
                <p>Input value: {this.state.inputValue}</p>
            </div>
        );
    }
}

export default Parent;

```jsx
// Child.js

import React from 'react';

class Child extends React.Component {
  constructor(props) {
    super(props);

    this.handleInputChange = this.handleInputChange.bind(this);
  }

  handleInputChange(event) {
    const value = event.target.value;
    this.props.onInputChange(value);
  }

  render() {
    return (
      <div>
        <h2>Child Component</h2>
        <input type="text" onChange={this.handleInputChange} />
      </div>
    );
  }
}

export default Child;

在上述代碼中,我們創(chuàng)建了一個父組件 Parent 和一個子組件 Child,并將 Child 組件作為 Parent 組件的子組件進(jìn)行渲染。

Child 組件有一個輸入框,并且通過 props 屬性將一個回調(diào)函數(shù) onInputChange 傳遞給 Parent 組件。當(dāng)輸入框中的值發(fā)生變化時,Child 組件將調(diào)用 onInputChange 回調(diào)函數(shù),并將輸入框中的值作為參數(shù)傳遞給它。Parent 組件接收到傳遞的值,并將其存儲在自己的狀態(tài)中。同時,Parent 組件將輸入框中的值顯示在頁面上。

使用 React Context 實現(xiàn)組件通信

在某些情況下,如果您需要將數(shù)據(jù)傳遞給多個組件,或者您的組件層級很深,那么通過 props 屬性將數(shù)據(jù)從一個組件傳遞到另一個組件可能會變得很繁瑣。在這種情況下,可以使用 React Context 來共享數(shù)據(jù)并在組件之間進(jìn)行通信。

React Context 是 React 16.3 版本中引入的一項新功能,它允許您在組件樹中傳遞數(shù)據(jù),而無需顯式地通過 props 屬性將數(shù)據(jù)傳遞下去。

使用 React Context,您可以創(chuàng)建一個“上下文”對象,其中包含需要共享的數(shù)據(jù),然后將其傳遞給 React 組件樹中的所有組件。這樣,任何組件都可以訪問該數(shù)據(jù),而不需要通過 props 屬性進(jìn)行傳遞。

下面的示例演示了如何使用 React Context 實現(xiàn)組件通信。

我們創(chuàng)建了一個 ThemeContext 上下文對象,其中包含一個名為 theme 的屬性。然后,我們創(chuàng)建了兩個組件 Toolbar 和 Button。Toolbar 組件將從 ThemeContext 上下文中獲取 theme 屬性,并將其作為 props 屬性傳遞給 Button 組件。Button 組件將使用接收到的 theme 屬性來渲染自己的樣式。

// ThemeContext.js

import React from 'react';

const ThemeContext = React.createContext('light');

export default ThemeContext;
// Toolbar.js

import React from 'react';
import Button from './Button';
import ThemeContext from './ThemeContext';

class Toolbar extends React.Component {
  render() {
    return (
      <div>
        <h1>Toolbar Component</h1>
        <Button />
      </div>
    );
  }
}

Toolbar.contextType = ThemeContext;

export default Toolbar;
// Button.js

import React from 'react';
import ThemeContext from './ThemeContext';

class Button extends React.Component {
  render() {
    const theme = this.context;

    return (
      <button style={{ background: theme === 'dark' ? '#000' : '#fff', color: theme === 'dark' ? '#fff' : '#000' }}>
        {theme === 'dark' ? 'Dark' : 'Light'} Button
      </button>
    );
  }
}

Button.contextType = ThemeContext;

export default Button;

在上述代碼中,我們創(chuàng)建了一個名為 ThemeContext 的上下文對象,并將其導(dǎo)出為默認(rèn)模塊。我們還創(chuàng)建了兩個組件 Toolbar 和 Button。Toolbar 組件是一個簡單的組件,它包含一個標(biāo)題和一個 Button 組件。

在 Toolbar 組件中,我們將 ThemeContext 上下文對象分配給了 contextType 類型的 static 類屬性。這告訴 React,我們希望 Toolbar 組件可以訪問 ThemeContext 上下文對象。然后,我們在 Toolbar 組件的 render 方法中,通過 this.context 屬性訪問 ThemeContext 上下文中的 theme 屬性,并將其作為 props 屬性傳遞給 Button 組件。

在 Button 組件中,我們也將 ThemeContext 上下文對象分配給了 contextType 類型的 static 類屬性。然后,在 render 方法中,我們使用 this.context 屬性訪問 ThemeContext 上下文對象,并根據(jù) theme 屬性渲染不同的樣式。

最后,我們可以在 App 組件中使用 ThemeContext.Provider 組件提供 theme 屬性。任何在 ThemeContext.Provider 組件之下的組件都可以通過 contextType 類型的 static 類屬性訪問 ThemeContext 上下文對象,從而共享 theme 屬性。

// App.js

import React from 'react';
import ThemeContext from './ThemeContext';
import Toolbar from './Toolbar';

class App extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      theme: 'light',
    };

    this.toggleTheme = this.toggleTheme.bind(this);
  }

  toggleTheme() {
    this.setState((state) => ({
      theme: state.theme === 'light' ? 'dark' : 'light',
    }));
  }

  render() {
    return (
      <div>
        <h1>App Component</h1>
        <button onClick={this.toggleTheme}>Toggle Theme</button>
        <ThemeContext.Provider value={this.state.theme}>
          <Toolbar />
        </ThemeContext
      </div>
    );
  }
}
export default App;

在上述代碼中,我們在 App 組件中創(chuàng)建了一個名為 theme 的狀態(tài),其默認(rèn)值為 light。我們還創(chuàng)建了一個 toggleTheme 方法,該方法在點擊按鈕時切換 theme 狀態(tài)的值。

render 方法中,我們使用 ThemeContext.Provider 組件提供了 theme 屬性。該組件將 Toolbar 組件包裝在其內(nèi)部,從而使 Toolbar 組件和 Button 組件都可以訪問 ThemeContext 上下文對象,并使用 theme 屬性渲染不同的樣式。

最后,我們將 App 組件導(dǎo)出為默認(rèn)模塊,以便在其他文件中使用它。

這是一個簡單的示例,演示了如何在 React 中使用上下文實現(xiàn)組件通信。當(dāng)需要在組件樹中的多個組件之間共享數(shù)據(jù)時,使用上下文是一種非常有用的技術(shù)。

總結(jié)

在React中,父子組件最常用的4種通信方式:

  • 通過 props 實現(xiàn)父子組件通信
  • 通過 state 實現(xiàn)父子組件通信
  • 通過回調(diào)函數(shù)實現(xiàn)父子組件通信
  • 使用 React Context 實現(xiàn)組件通信

在項目實戰(zhàn)過程中,可根據(jù)實際情況選擇最合適的通信方式。文章來源地址http://www.zghlxwxcb.cn/news/detail-448480.html

寫在最后

?原創(chuàng)不易,希望各位大佬多多支持。
??點贊,你的認(rèn)可是我創(chuàng)作的動力。
??收藏,感謝你對本文的喜歡。
??評論,你的反饋是我進(jìn)步的財富。

到了這里,關(guān)于【react從入門到精通】React父子組件通信方式詳解(有示例)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【react從入門到精通】React JSX詳解

    【react從入門到精通】React JSX詳解

    ?創(chuàng)作者:全棧弄潮兒 ?? 個人主頁: 全棧弄潮兒的個人主頁 ??? 個人社區(qū),歡迎你的加入:全棧弄潮兒的個人社區(qū) ?? 專欄地址:react從入門到精通 【分享幾個國內(nèi)免費可用的ChatGPT鏡像】 【10幾個類ChatGPT國內(nèi)AI大模型】 【用《文心一言》1分鐘寫一篇博客簡直yyds】 【用

    2024年02月05日
    瀏覽(19)
  • 前端react入門day03-react獲取dom與組件通信

    前端react入門day03-react獲取dom與組件通信

    (創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動力,如果看完對你有幫助,請留下您的足跡) 目錄 受控表單綁定? React中獲取DOM 組件通信 父傳子? 父傳子-基礎(chǔ)實現(xiàn) 父傳子-props說明 父傳子 - 特殊的prop children 子傳父? 使用狀態(tài)提升實現(xiàn)兄弟組件通信 使用Context機制跨

    2024年02月01日
    瀏覽(24)
  • React初體驗-Hello React的組件化方式-React入門小案例

    React初體驗-Hello React的組件化方式-React入門小案例

    接下來我們通過Hello React的案例, 來體驗一下React開發(fā)模式, 以及jsx的語法 Hello React案例演練 第一步: 先引入React開發(fā)依賴 第二步: 這里我們編寫React的script代碼中,必須添加 type=\\\"text/babel\\\" ,作用是可以讓babel解析jsx的語法 第三步: 創(chuàng)建元素渲染到頁面 React18之前的做法: 通過 R

    2023年04月08日
    瀏覽(21)
  • React中父子組件參數(shù)傳遞講解

    React中父子組件參數(shù)傳遞講解

    結(jié)合案例:github搜索案例 案例結(jié)果展示如下圖 1.父容器代碼 說明:父容器中包含了兩個組件模塊,分別是Search和List,用來搜索和顯示 2.搜索Search子模塊代碼 3.展示Lisi子模塊代碼 父子參數(shù)傳遞分析 1.子(Search)傳父(App) 首先在父容器APP的state中創(chuàng)建狀態(tài)屬性,再傳給子模塊Sea

    2024年02月09日
    瀏覽(26)
  • react和vue2/3父子組件的雙向綁定

    react和vue2/3父子組件的雙向綁定

    目錄 Vue3 父子傳值:props(attrs)/emit 父傳子 props 父child :屬性名=\\\"變量\\\" 子props=defineProps({屬性名:type...}) attrs父作用域(除 class、 style 、?props?)屬性集合 父child :屬性名=\\\"變量\\\",屬性名=\\\"常量\\\" 子?attrs = useAttrs() 子傳父emits+@=v-on: 父child @事件名\\\"=\\\"parentClick\\\",parentClick(msg) 子emi

    2024年02月16日
    瀏覽(29)
  • React antd tree樹組件 - 父子節(jié)點沒有自動關(guān)聯(lián)情況下 - 顯示半選、全選狀態(tài)以及實現(xiàn)父子節(jié)點互動

    React antd tree樹組件 - 父子節(jié)點沒有自動關(guān)聯(lián)情況下 - 顯示半選、全選狀態(tài)以及實現(xiàn)父子節(jié)點互動

    實現(xiàn)的效果圖如下: 如Ant Design Vue 中所示,并沒有提供獲取半選節(jié)點的方法,當(dāng)設(shè)置checked和checkStrictly時,父子節(jié)點也不再自動關(guān)聯(lián)了 前提:從后端可以獲取的數(shù)據(jù)分別是完整的樹型數(shù)據(jù)、所有選中的節(jié)點數(shù)據(jù)(一個數(shù)組、同時包含 父節(jié)點和子節(jié)點),具體的大概數(shù)據(jù)可以

    2024年02月13日
    瀏覽(34)
  • JavaScript 發(fā)布-訂閱設(shè)計模式實現(xiàn) React EventBus(相當(dāng)于vue的$Bus)非父子之間通信

    參考文檔:https://github1s.com/browserify/events/blob/main/events.js ? ? ? ? ? ? ? ? ?https://www.npmjs.com/package/events ? ? ? ? ? ? ? ? ?https://github.com/browserify/events ? ? ? ? ? ? ? ? ? ? 首先先新建一個文件eventBus.tsx 然后再組件A使用=接收 然后再組件B使用=觸發(fā) ? ? 安裝這個events插件

    2023年04月18日
    瀏覽(374)
  • 微信小程序父子組件之間通信的 3 種方式

    父子組件之間通信的 3 種方式 ① 屬性綁定 ? 用于父組件向子組件的指定屬性設(shè)置數(shù)據(jù),僅能設(shè)置 JSON 兼容的數(shù)據(jù) ② 事件綁定 ? 用于子組件向父組件傳遞數(shù)據(jù),可以傳遞任意數(shù)據(jù) ③ 獲取組件實例 ? 父組件還可以通過 this.selectComponent() 獲取子組件實例對象,這樣就可以直

    2024年02月09日
    瀏覽(85)
  • 面試題-React(七):React組件通信

    面試題-React(七):React組件通信

    在React開發(fā)中,組件通信是一個核心概念,它使得不同組件能夠協(xié)同工作,實現(xiàn)更復(fù)雜的交互和數(shù)據(jù)傳遞。常見的組件通信方式:父傳子和子傳父 一、父傳子通信方式 父組件向子組件傳遞數(shù)據(jù)是React中最常見的一種通信方式。這種方式適用于將數(shù)據(jù)從一個上層組件傳遞到其直

    2024年02月11日
    瀏覽(36)
  • VUE 父子組件、兄弟組件 之間通信 最強詳解

    VUE 父子組件、兄弟組件 之間通信 最強詳解

    目錄 1. 父組件 調(diào)用 子組件 內(nèi)參數(shù)/方法 1.1 通過 ref 調(diào)用/獲取 子組件內(nèi)參數(shù)/方法 2. 子組件 調(diào)用 父組件 內(nèi)參數(shù)/方法 2.1 通過?emit 調(diào)用 父組件方法 2.2 通過?props?調(diào)用 父組件方法/參數(shù) 2.3 通過 this.$parent 調(diào)用 父組件方法/參數(shù) 3. 兄弟組件 通信 3.1 通過?bus 進(jìn)行 兄弟組件 通信

    2024年02月05日
    瀏覽(96)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包