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

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

主站蜘蛛池模板: 国产中文 | 日韩精品日韩 | 欧美mv | 亚洲韩国日本 | 老熟女重囗味 | 亚洲精品无播 | 飘雪免费手机全集在线观看 | 国产综合视频在线观看8 | 2025国产精品手机在线观看 | 日皮免费视频 | 秋霞影视免费播放手机版 | 成人免费视频软件网站 | 国产在线乱码一区二区三区 | 企业档案 | 欧美国产一区二区三区精品 | 国产深夜在线免费观看 | 国产精品偷伦 | 国产视频精品一区白白色 | 欧美在线伊人 | 国产va免费精品高清在线 | 精品欧美视频在线播放不卡 | 国产黑色丝袜在线观看下 | 日本免费一区高清观看 | 国产资源精品一区二区免费 | 免费看高视频hh网站免费 | 久艹伊人精品综合在线 | 91区国产福利在线观看午夜 | 神马电影网 | 亚洲91视频网站 | 精品人伦一区二区三区蜜桃 | 欧美校园激情清纯另类 | 午夜福利国产一区二区三区 | 日本成a人片在线播放 | 中文字幕日韩一区二区不卡 | 国产亚洲精 | 飘雪免费手机全集在线观看 | 亚洲熟女综合 | 521国产精品网站在线观看 | 久热这里只有精品99在线观看 | 舔射插啊~在线观 | 国产在线播放不卡 |