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

React組件通信的實現(xiàn)示例

 更新時間:2023年11月13日 08:36:03   作者:寶子向前沖  
在React中,組件通信是一個重要的概念,它允許不同組件之間進行數(shù)據(jù)傳遞和交互,本文主要介紹了React組件通信的實現(xiàn)示例,感興趣的可以了解一下

組件通信的意義

目標任務(wù): 了解為什么需要組件通信

組件是獨立且封閉的單元,默認情況下組件只能使用自己的數(shù)據(jù)(state)

組件化開發(fā)的過程中,完整的功能會拆分多個組件,在這個過程中不可避免的需要互相傳遞一些數(shù)據(jù)

為了能讓各組件之間可以進行互相溝通,數(shù)據(jù)傳遞,這個過程就是組件通信

  • 父子關(guān)系 - 最重要的

  • 兄弟關(guān)系 - 自定義事件模式產(chǎn)生技術(shù)方法 eventBus / 通過共同的父組件通信

  • 其它關(guān)系 - mobx / redux / zustand

父傳子實現(xiàn)

目標任務(wù): 實現(xiàn)父子通信中的父傳子,把父組件中的數(shù)據(jù)傳給子組件

實現(xiàn)步驟

  • 父組件提供要傳遞的數(shù)據(jù) - state

  • 給子組件標簽添加屬性值為 state中的數(shù)據(jù)

  • 子組件中通過 props 接收父組件中傳過來的數(shù)據(jù)

  • 類組件使用this.props獲取props對象

    函數(shù)式組件直接通過參數(shù)獲取props對象

代碼實現(xiàn)

 import React from 'react'
 ?
 // 函數(shù)式子組件
 function FSon(props) {
   console.log(props)
   return (
     <div>
       子組件1
       {props.msg}
     </div>
   )
 }
 ?
 // 類子組件
 class CSon extends React.Component {
   render() {
     return (
       <div>
         子組件2
         {this.props.msg}
       </div>
     )
   }
 }
 // 父組件
 class App extends React.Component {
   state = {
     message: 'this is message'
   }
   render() {
     return (
       <div>
         <div>父組件</div>
         <FSon msg={this.state.message} />
         <CSon msg={this.state.message} />
       </div>
     )
   }
 }
 ?
 export default App

props說明

目標任務(wù): 知道props傳遞時的一些注意事項

1. props是只讀對象(readonly)

根據(jù)單項數(shù)據(jù)流的要求,子組件只能讀取props中的數(shù)據(jù),不能進行修改

2. props可以傳遞任意數(shù)據(jù)

數(shù)字、字符串、布爾值、數(shù)組、對象、函數(shù)、JSX

class App extends React.Component {
   state = {
     message: 'this is message'
   }
   render() {
     return (
       <div>
         <div>父組件</div>
         <FSon 
           msg={this.state.message} 
           age={20} 
           isMan={true} 
           cb={() => { console.log(1) }} 
           child={<span>this is child</span>}
         />
         <CSon msg={this.state.message} />
       </div>
     )
   }
 }

子傳父實現(xiàn)

目標任務(wù): 實現(xiàn)父子通信中的子傳父

口訣: 父組件給子組件傳遞回調(diào)函數(shù),子組件調(diào)用

實現(xiàn)步驟

  • 父組件提供一個回調(diào)函數(shù) - 用于接收數(shù)據(jù)

  • 將函數(shù)作為屬性的值,傳給子組件

  • 子組件通過props調(diào)用 回調(diào)函數(shù)

  • 將子組件中的數(shù)據(jù)作為參數(shù)傳遞給回調(diào)函數(shù)

代碼實現(xiàn)

import React from 'react'
 ?
 // 子組件
 function Son(props) {
   function handleClick() {
     // 調(diào)用父組件傳遞過來的回調(diào)函數(shù) 并注入?yún)?shù)
     props.changeMsg('this is newMessage')
   }
   return (
     <div>
       {props.msg}
       <button onClick={handleClick}>change</button>
     </div>
   )
 }
 ?
 ?
 class App extends React.Component {
   state = {
     message: 'this is message'
   }
   // 提供回調(diào)函數(shù)
   changeMessage = (newMsg) => {
     console.log('子組件傳過來的數(shù)據(jù):',newMsg)
     this.setState({
       message: newMsg
     })
   }
   render() {
     return (
       <div>
         <div>父組件</div>
         <Son
           msg={this.state.message}
           // 傳遞給子組件
           changeMsg={this.changeMessage}
         />
       </div>
     )
   }
 }
 ?
 export default App

兄弟組件通信

目標任務(wù): 實現(xiàn)兄弟組件之間的通信

核心思路: 通過狀態(tài)提升機制,利用共同的父組件實現(xiàn)兄弟通信

實現(xiàn)步驟

  • 將共享狀態(tài)提升到最近的公共父組件中,由公共父組件管理這個狀態(tài)

    • 提供共享狀態(tài)

    • 提供操作共享狀態(tài)的方法

  • 要接收數(shù)據(jù)狀態(tài)的子組件通過 props 接收數(shù)據(jù)

  • 要傳遞數(shù)據(jù)狀態(tài)的子組件通過props接收方法,調(diào)用方法傳遞數(shù)據(jù)

代碼實現(xiàn)

 import React from 'react'
 ?
 // 子組件A
 function SonA(props) {
   return (
     <div>
       SonA
       {props.msg}
     </div>
   )
 }
 // 子組件B
 function SonB(props) {
   return (
     <div>
       SonB
       <button onClick={() => props.changeMsg('new message')}>changeMsg</button>
     </div>
   )
 }
 ?
 // 父組件
 class App extends React.Component {
   // 父組件提供狀態(tài)數(shù)據(jù)
   state = {
     message: 'this is message'
   }
   // 父組件提供修改數(shù)據(jù)的方法
   changeMsg = (newMsg) => {
     this.setState({
       message: newMsg
     })
   }
 ?
   render() {
     return (
       <>
         {/* 接收數(shù)據(jù)的組件 */}
         <SonA msg={this.state.message} />
         {/* 修改數(shù)據(jù)的組件 */}
         <SonB changeMsg={this.changeMsg} />
       </>
     )
   }
 }
 ?
 export default App

跨組件通信Context

目標任務(wù): 了解Context機制解決的問題和使用步驟

上圖是一個react形成的嵌套組件樹,如果我們想從App組件向任意一個下層組件傳遞數(shù)據(jù),該怎么辦呢?目前我們能采取的方式就是一層一層的props往下傳,顯然很繁瑣

那么,Context 提供了一個無需為每層組件手動添加 props,就能在組件樹間進行數(shù)據(jù)傳遞的方法

實現(xiàn)步驟

1- 創(chuàng)建Context對象 導(dǎo)出 Provider 和 Consumer對象

 const { Provider, Consumer } = createContext()

2- 使用Provider包裹上層組件提供數(shù)據(jù)

<Provider value={this.state.message}>
     {/* 根組件 */}
 </Provider>

3- 需要用到數(shù)據(jù)的組件使用Consumer包裹獲取數(shù)據(jù)

 <Consumer >
     {value => /* 基于 context 值進行渲染 */}
 </Consumer>

代碼實現(xiàn)

import React, { createContext }  from 'react'
 ?
 // 1. 創(chuàng)建Context對象 
 const { Provider, Consumer } = createContext()
 ?
 ?
 // 3. 消費數(shù)據(jù)
 function ComC() {
   return (
     <Consumer >
       {value => <div>{value}</div>}
     </Consumer>
   )
 }
 ?
 function ComA() {
   return (
     <ComC/>
   )
 }
 ?
 // 2. 提供數(shù)據(jù)
 class App extends React.Component {
   state = {
     message: 'this is message'
   }
   render() {
     return (
       <Provider value={this.state.message}>
         <div className="app">
           <ComA />
         </div>
       </Provider>
     )
   }
 }
 ?
 export default App

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

相關(guān)文章

  • 解決react組件渲染兩次的問題

    解決react組件渲染兩次的問題

    這篇文章主要介紹了解決react組件渲染兩次的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • react學(xué)習(xí)每天一個hooks?useWhyDidYouUpdate

    react學(xué)習(xí)每天一個hooks?useWhyDidYouUpdate

    這篇文章主要為大家介紹了react學(xué)習(xí)每天一個hooks?useWhyDidYouUpdate使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • react?redux及redux持久化示例詳解

    react?redux及redux持久化示例詳解

    這篇文章主要為大家介紹了react?redux及redux持久化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Electron+React進行通信的方法

    Electron+React進行通信的方法

    electron其實是一個桌面應(yīng)用程序,不是一個標準的前端web程序,所有沒有什么請求的發(fā)生,控制臺network看不到請求,而是只能通過console.log去打印查看,而且通信協(xié)議使用的不是http而是gRPC協(xié)議,這篇文章主要介紹了Electron+React如何進行通信,需要的朋友可以參考下
    2022-06-06
  • ReactNative錯誤采集原理在Android中實現(xiàn)詳解

    ReactNative錯誤采集原理在Android中實現(xiàn)詳解

    這篇文章主要為大家介紹了ReactNative錯誤采集原理在Android中實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • react最流行的生態(tài)替代antdpro搭建輕量級后臺管理

    react最流行的生態(tài)替代antdpro搭建輕量級后臺管理

    這篇文章主要為大家介紹了react最流行的生態(tài)替代antdpro搭建輕量級后臺管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解React 中組件通信的幾種主要方式

    詳解React 中組件通信的幾種主要方式

    本文主要介紹了詳解React 中組件通信的幾種主要方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • react+ant.d添加全局loading方式

    react+ant.d添加全局loading方式

    這篇文章主要介紹了react+ant.d添加全局loading方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • React?中使用?react-i18next?國際化的過程(react-i18next?的基本用法)

    React?中使用?react-i18next?國際化的過程(react-i18next?的基本用法)

    i18next?是一款強大的國際化框架,react-i18next?是基于?i18next?適用于?React?的框架,本文介紹了?react-i18next?的基本用法,如果更特殊的需求,文章開頭的官方地址可以找到答案
    2023-01-01
  • React中井字棋游戲的實現(xiàn)示例

    React中井字棋游戲的實現(xiàn)示例

    本文主要介紹了React中井字棋游戲的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論