日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網站管理員

React 入門基礎:組件通信之兄弟組件和跨級組件

admin
2024年12月15日 9:16 本文熱度 891

?? 如果還不了解 HTML 、 CSS和JS,可以參考本號下的 HTML21 天入門教程、 CSS 21 天入門教程和JS21天入門教程。

在前面的 組件通信之父子組件 中,講到了父子組件之間的通信是通過 props 實現的。

今天來說一下兄弟組件和跨級組件之間的通信方式。

什么是兄弟組件

如上圖,組件 A 和組件 B 就是兄弟組件,它們存在于同一個父組件中。

那么,它們是如何通信的呢?

兄弟組件之間的通信

兄弟組件之間無法直接通信,它們需要借助于父組件進行通信。

前面講父子組件之間通信的時候講了父到子和子到父兩種通信。

借助于這兩種通信就能實現兩步通信:子組件 A 到父組件,父組件到子組件 B。

前面實現了 SayHello 組件傳遞消息到父組件,現在來實現另一個組件 SayHelloMsg 。

import React from 'react';  function SayHelloMsg(props) {   return (     <div>       <p>SayHelloMsg子組件</p>       {props.message}       <hr />     </div>   ); }  export default SayHelloMsg; 

這個組件非常簡單,就是接收到自父組件的 message 并顯示。

在父組件中,import 這個組件,然后修改之前的顯示。

import './App.css'; import SayHello from './SayHello'; import { useState } from 'react'; import SayHelloMsg from './SayHelloMsg';  function App() {   const [msg, setMsg] = useState('');    const handleChildMessage = (message) => {     setMsg(message);     console.log('Received message from child:', message);   };   return (     <div>       {/* <div>{msg}</div> */}       <SayHelloMsg message={msg} />       <SayHello name="World" onMessage={handleChildMessage} />     </div>   ); }  export default App; 

這樣修改完之后效果如下:

什么是跨級組件

如下圖所示,父組件與組件 A1 就屬于跨級組件,他們中間了一層組件 A。

跨級組件通信

按前面講過的如果想要父組件與組件 A1 之間實現通信,通過 props 一級一級傳遞是可以實現的。

但這樣有點兒麻煩是不是,有沒有更好的方法呢?

有。

實現它的基本原理是一樣的,就是把數據放在某個地方存起來,組件都能訪問到。

使用 React Context API

React Context 類似于 Session,如果你熟悉的話。

不同的是它提供了訂閱機制,只要有更新,訂閱了它的組件都會收到通知。

先定義 MyContext 組件,它會被組件和組件 A1 用到。

import React from 'react';  export const MyContext = React.createContext(); 

定義組件 A1,這里是 SayHelloContainerMsg 。

import React, { useContext } from 'react'; import { MyContext } from './MyContext';  function SayHelloContainerMsg() {   const helloMsg = useContext(MyContext);   return (     <div>       <p>Testing info: </p> {helloMsg} <hr />     </div>   ); }  export default SayHelloContainerMsg; 

通過導入 MyContext 獲取里面的值 helloMsg 。這個值是父組件放進去的。

再定義組件 SayHelloContainer,它就是這里的組件 A,只是一個殼,用來顯示 SayHelloContainerMsg 。

import SayHelloContainerMsg from './SayHelloContainerMsg';  function SayHelloContainer() {   return (     <div>       <SayHelloContainerMsg />     </div>   ); }  export default SayHelloContainer; 

最后看在父組件里的調用。

它同樣導入了 MyContext,然后通過 Provider 傳入 value 值 。

import SayHelloContainer from './SayHelloContainer'; import { MyContext } from './MyContext';  function App() {   const helloMsg = 'Hello From App';   return (     <MyContext.Provider value={helloMsg}>       <SayHelloContainer />     </MyContext.Provider>   ); }  export default App; 

這樣在頁面上,顯示的內容如下:

?

使用狀態(tài)管理庫

除了上述使用 Context,React 里有很多狀態(tài)管理庫,比如 Redux。

它們通過把數據存儲在 store 中,同樣采用訂閱的方式通知更新。

這類組件適用于大型應用中復雜的狀態(tài)管理。這里暫時不舉示例代碼。

總結

最后來總結一下今天的內容要點:

  • ?? 兄弟組件之間的通信通過父組件的 props 實現。
  • ?? 跨級組件可以一級一級傳遞,但可以使用 Context 簡化操作。
  • ?? 第三方狀態(tài)管理庫比如 Redux 提示了完善的狀態(tài)管理,適用于大型應用的狀態(tài)管理。

該文章在 2024/12/16 10:10:16 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 人妖ts国产手机在线 | 国产乱理伦片a级在线观看 制服丝袜欧美中文 | 国产在线观看免费永久 | 欧美日韩中文在线视频 | 国产日b| 2025精品国夜夜天天拍 | 欧美日韩1区2区 | 91福利| 亚洲à∨精品一区二区三区导航 | 精品视频一区二区三三区四区 | 91成人影院在线观看 | 精品一区二区三区视频在线 | 老司机91精品网站在线观看 | 亚洲欧美在线观看片不卡 | 欧美又粗又大一区二区 | 亚洲欧美色一区二区三区精品 | 国产乱妇乱子在线播放视频 | 91看片婬黄大片91挑色 | 国产亚洲一区二区手机在线观看 | 中文日产幕无线码系列 | 午夜福利在线观看 | 日本欧美大码 | 国产手机精品自拍视频 | 中文字幕亚洲综合小综合在线 | 国产在线视频无卡a | 国产激情怍爱视频在线观看 | 国产精品综合色 | 国产一区二区免费在线观看 | 视频在线观看免费网站 | 老牛影视 | 在线中文字幕日韩 | 破了亲妺妺的处免费视频国产 | 91精品国产免费青青碰 | 精品在线视频免费在线观 | 亚洲第一香蕉 | 亚洲国产精品∨a在线看黑人 | 天天澡日日澡狠狠欧美老妇 | 男女猛烈xx00免费视频试看 | 精品一区二区成人 | 日本一在线中文字幕天堂 | 亚洲欧美精品变态另类 |