React - 組件通信

組件通信

概念:組件通信就是組件之間數據傳遞,根據組件嵌套關系不同,有不同的通信方法

父傳子 ——?基礎實現?

實現步驟

  1. 父組件傳遞數據 - 在子組件標簽上綁定屬性
  2. 子組件接收數據 - 子組件通過props參數接收數據
?聲明子組件并使用
//聲明子組件      首字母大寫
const Headerzujian = ()=>{return <div>子組件</div>
}//使用子組件<Headerzujian></Headerzujian>
父組件傳遞數據 - 在子組件標簽上綁定屬性
<Headerzujian name={'傳遞的數據'}></Headerzujian>      //name是傳遞的數據
子組件接收數據 - 子組件通過props參數接收數據
const Headerzujian = (props)=>{console.log(props); //props對象里包含了父組件傳遞過來的所有數據return <div>子組件 傳遞的數據={props.name}</div>
}

父傳子 —— prpos說明

  1. props可傳任意的數據:數字,字符串,布爾值,數組,對象,函數,JSX
  2. props是只讀對象:props只能讀取props中的數據,不能直接進行修改,父組件的數據只能由父組件修改
傳遞多種類型?
<Headerzujian name={'傳遞了數據'} age={12} boolean={false} arr={[1,2,3]} obj={{school:"第一中學"} } fun={()=>{return '11'}} jsx ={<span>span元素</span>} ></Headerzujian>
接收到的數據

父傳子 ——??特殊的prop children?

場景:當我們把內容嵌套在子組件標簽中時,父組件會自動在名為children的prop屬性中接收該內容?

使用? ?把內容嵌套在子組件標簽中
 <Headerzujian> 1111</Headerzujian>
?父組件會自動在名為children的prop屬性中接收該內

子傳父?—— 基礎實現

核心思路:在子組件中調用父組件中的函數并傳遞參數

?當子組件需要向父組件傳遞數據時,父組件可以向子組件傳遞一個回調函數作為 props。子組件在特定的事件觸發時(如按鈕點擊、表單提交等)調用這個回調函數,并將需要傳遞的數據作為參數傳遞給該回調函數。這樣父組件就能接收到子組件傳來的數據,實現反向的數據流動。

?父組件向子組件傳遞一個回調函數
  <Headerzujian onmessage={getmessage}> 1111</Headerzujian>{zidata}//展示2580const [zidata,setzidata] = useState('')
const getmessage =(data)=>{console.log(data);  //結果為2580 //要在父組件使用需要使用useState接收setzidata(data)}
子組件在特定的事件觸發時(如按鈕點擊、表單提交等)調用這個回調函數
//聲明組件
const Headerzujian = ({onmessage})=>{return <div onClick={()=>{onmessage(2580)}}>子組件</div>   //調用并傳遞參數
}

兄弟組件通信? ? ?使用狀態提升實現

實現思路:借組"狀態提升"機制,通過父組件進行兄弟組件之間的數據傳遞

  1. A組件先通過子傳父方式把數據傳遞給父組件App
  2. APP在通過父傳子方式把數據傳遞給組件B?
聲明兩個兄弟組件并使用
const Mainzujian = ({onBrother})=>{return <div >兄弟組件1</div>
}
const Bottomzujian = (props)=>{return <div>兄弟組件2</div>
}<Mainzujian></Mainzujian><Bottomzujian></Bottomzujian>
?兄弟組件1先通過子傳父方式把數據傳遞給父組件App
<Mainzujian onBrother={Brothermeg}></Mainzujian>//接收子組件傳遞的數據
const [msg,setmsg] = useState('')
const Brothermeg = (data)=>{console.log(data);setmsg(data) 
}//向父組件傳值
const Mainzujian = ({onBrother})=>{return <div onClick={()=>{onBrother('兄弟你好')}}>兄弟組件1</div>
}
APP在通過父傳子方式把數據傳遞給組件B
  <Bottomzujian data={msg}></Bottomzujian>  //向子組件傳值//子組件接受并使用
const Bottomzujian = (props)=>{return <div onClick={()=>{}}>兄弟組件2 兄弟傳遞的數據 {props.data}</div>
}

使用Context機制跨層級組件通信

實現步驟
  1. 使用createContext方法創建一個上下文對象Ctx
  2. 在頂級組件( APP )中通過Ctx.Provider 組件提供數據
  3. 在底層組件( B )中通過useContext鉤子函數獲取數據
?聲明組件并使用組件
const Zizujian = ()=>{return <div>子組件<Sunzujian></Sunzujian></div>
}const Sunzujian = ()=>{return <div>孫組件</div>;
}<Zizujian />
?使用createContext方法創建一個上下文對象Ctx
import { useState ,useRef, createContext,useContext} from "react"; //導入const MyContext = createContext()
在頂級組件( APP )中通過Ctx.Provider 組件提供數據
  <MyContext.Provider value={msgfu}>       //value值為要傳遞的數據<div>父組件<Zizujian /></div></MyContext.Provider>
在底層組件( B )中通過useContext鉤子函數獲取數據
const Sunzujian = ()=>{const msg = useContext(MyContext);return <div>孫組件接收到的數據: {msg}</div>;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83141.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RKNN開發環境搭建2-RKNN Model Zoo 環境搭建

目錄 1.簡介2.環境搭建2.1 啟動 docker 環境2.2 安裝依賴工具2.3 下載 RKNN Model Zoo2.4 RKNN模型轉化2.5編譯C++1.簡介 RKNN Model Zoo基于 RKNPU SDK 工具鏈開發, 提供了目前主流算法的部署例程. 例程包含導出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. ??本…

計算機視覺頂刊《International Journal of Computer Vision》2025年5月前沿熱點可視化分析

追蹤計算機視覺領域的前沿熱點是把握技術發展方向、推動創新落地的關鍵&#xff0c;分析這些熱點&#xff0c;不僅能洞察技術趨勢&#xff0c;更能為科研選題和工程實踐提供重要參考。本文對計算機視覺頂刊《International Journal of Computer Vision》2025年5月前沿熱點進行了…

互聯網大廠Java求職面試:云原生與微服務架構的深度探討

互聯網大廠Java求職面試&#xff1a;云原生與微服務架構的深度探討 第一輪提問 面試官&#xff1a; “鄭薪苦&#xff0c;假設我們要設計一個大規模電商平臺的微服務架構&#xff0c;你會如何設計其訂單服務&#xff1f;” 鄭薪苦&#xff1a; “首先&#xff0c;我會采用…

STM32實戰:數字音頻播放器開發指南

基于STM32的數字音頻播放器/效果器是個很棒的項目&#xff01;這涉及到多個嵌入式開發的關鍵技術點。下面我為你拆解實現方案和關鍵學習內容&#xff1a; 系統架構概覽 [SD Card] -> [File System (FATFS)] -> [Audio Decoder (WAV/MP3)] -> [DSP Processing (EQ, R…

基于TurtleBot3在Gazebo地圖實現機器人遠程控制

1. TurtleBot3環境配置 # 下載TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…

【Vue】scoped+組件通信+props校驗

【scoped作用及原理】 【作用】 默認寫在組件中style的樣式會全局生效, 因此很容易造成多個組件之間的樣式沖突問題 故而可以給組件加上scoped 屬性&#xff0c; 令樣式只作用于當前組件的標簽 作用&#xff1a;防止不同vue組件樣式污染 【原理】 給組件加上scoped 屬性后…

IDEA 中 Maven Dependencies 出現紅色波浪線的原因及解決方法

在使用 IntelliJ IDEA 開發 Java 項目時&#xff0c;尤其是基于 Maven 的項目&#xff0c;開發者可能會遇到 Maven Dependencies 中出現紅色波浪線的問題。這種現象通常表示項目依賴未能正確解析或下載&#xff0c;導致代碼提示錯誤、編譯失敗等問題。本文將詳細分析該問題的常…

把二級域名綁定的wordpress網站的指定頁面

要將二級域名(如 beijing.wodepress.com)綁定到 WordPress 網站的指定頁面(如 wodepress.com/beijing)&#xff0c;你需要完成以下步驟&#xff1a; 步驟 1&#xff1a;創建二級域名 登錄你的域名控制面板(如 cPanel、阿里云、騰訊云等)。 找到 DNS 管理 或 域名解析 部分。…

FreeRTOS學習01_移植FreeRTOS到STM32(圖文詳解)

移植FreeRTOS到STM32 1、前言2、獲取 STM32 的裸機工程模板3、下載 FreeRTOS V9.0.0 源碼4、FreeRTOS文件夾內容簡介5、移植FreeRTOS5.1 更改STM32工程模板文件夾名字5.2 提取FreeRTOS最簡源碼5.3 拷貝 FreeRTOSConfig.h 文件到 user 文件夾5.4 添加 FreeRTOS 源碼到工程組文件…

12.找到字符串中所有字母異位詞

&#x1f9e0; 題目解析 題目描述&#xff1a; 給定兩個字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母異位詞的起始索引。 返回的答案以數組形式表示。 字母異位詞定義&#xff1a; 若兩個字符串包含的字符種類和出現次數完全相同&#xff0c;順序無所謂&#xff0c;則互為…

基于Springboot+Vue的辦公管理系統

角色&#xff1a; 管理員、員工 技術&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 該辦公管理系統是一個綜合性的企業內部管理平臺&#xff0c;旨在提升企業運營效率和員工管理水…

【磁盤】每天掌握一個Linux命令 - iostat

目錄 【磁盤】每天掌握一個Linux命令 - iostat工具概述安裝方式核心功能基礎用法進階操作實戰案例面試題場景生產場景 注意事項 【磁盤】每天掌握一個Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系統下用于監視系統輸入輸出設備和CPU使…

專業文件比對輔助軟件

軟件介紹 本文介紹一款用于文件內容對比的計算機輔助工具&#xff0c;支持快速識別不同版本文檔間的差異內容。 功能與版本特性 這款工具提供無償使用授權&#xff0c;技術文檔顯示其開發歷程已達近三十年。程序采用獨立封裝設計&#xff0c;無需安裝即可直接運行。 基礎操…

【時時三省】(C語言基礎)變量的存儲方式和生存期

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 動態存儲方式與靜態存儲方式 從變量的作用域&#xff08;即從空間&#xff09;的角度來觀察&#xff0c;變量可以分為全局變量和局部變量。 還可以從另一個角度&#xff0c;即從變量值存在…

記錄:外擴GPIOD訪問報警告

rk提供的rfkill-bt.c驅動訪問外擴GPIO輸出如下警告&#xff1a; [ 4.694993] ------------[ cut here ]------------ [ 4.694994] WARNING: CPU: 7 PID: 582 at drivers/gpio/gpiolib.c:2805 gpiod_get_raw_value0x58/0xd4 [ 4.695003] Modules linked in: [ 4.69…

LangChain面試內容整理-知識點4:工具(Tool)機制與實現

在LangChain中,工具(Tool)是智能體(Agent)、鏈(Chain)或LLM可以調用的外部函數接口。可以將Tool理解為LLM可以使用的能力或插件:通過調用工具,LLM能夠獲取額外的信息或執行特定的動作,比如查詢數據庫、搜索互聯網、做數學計算等comet.compinecone.io。工具賦予了LLM交…

GraphQL 實戰篇:Apollo Client 配置與緩存

GraphQL 實戰篇&#xff1a;Apollo Client 配置與緩存 上一篇&#xff1a;GraphQL 入門篇&#xff1a;基礎查詢語法 依舊和上一篇的筆記一樣&#xff0c;主實操&#xff0c;沒啥過多的細節講解&#xff0c;代碼具體在&#xff1a; https://github.com/GoldenaArcher/graphql…

web3-基于貝爾曼福特算法(Bellman-Ford )與 SMT 的 Web3 DeFi 套利策略研究

web3-基于貝爾曼福特算法&#xff08;Bellman-Ford &#xff09;與 SMT 的 Web3 DeFi 套利策略研究 如何找到Defi中的交易機會 把defi看做是一個完全開放的金融產品圖表&#xff0c;可以看到所有的一切東西&#xff1b;我們要沿著這些金融圖表找到一些最優的路徑&#xff0c;就…

SQL Server 觸發器調用存儲過程實現發送 HTTP 請求

文章目錄 需求分析解決第 1 步:前置條件,啟用 OLE 自動化方式 1:使用 SQL 實現啟用 OLE 自動化方式 2:Sql Server 2005啟動OLE自動化方式 3:Sql Server 2008啟動OLE自動化第 2 步:創建存儲過程第 3 步:創建觸發器擴展 - 如何調試?第 1 步:登錄 SQL Server 2008第 2 步…

Go 語言中的內置運算符

1. 算術運算符 注意&#xff1a; &#xff08;自增&#xff09;和--&#xff08;自減&#xff09;在 Go 語言中是單獨的語句&#xff0c;并不是運算符。 package mainimport "fmt"func main() {fmt.Println("103", 103) // 13fmt.Println("10-3…