react中通過 EventEmitter 在組件間傳遞狀態

要在 Reply 組件中通過?statusChangeEvent?發送狀態值,并在 Select 組件中接收這個狀態值?status,你可以按照以下步驟實現:

//Event.jsimport EventEmitter from 'events';export const statusChangeEvent = new EventEmitter();// 工單狀態切換事件

1. 在 Reply 組件中發送狀態值

你已經正確地在 Reply 組件中設置了事件發射:

// Reply.jsx
import { statusChangeEvent } from './Event';const Reply = () => {const [status, setStatus] = useState('');const changeStatus = useCallback(status => {setStatus(status);statusChangeEvent.emit('status-changedValue', status);}, []);return (// 你的組件內容<button onClick={() => changeStatus('new-status')}>更改狀態</button>);
};

2. 在 Select 組件中接收狀態值

// Select.jsx
import { useEffect, useState } from 'react';
import { statusChangeEvent } from './Event';const Select = () => {const [status, setStatus] = useState('');useEffect(() => {// 定義事件監聽器const handleStatusChange = (newStatus) => {setStatus(newStatus);};// 添加事件監聽statusChangeEvent.on('status-changedValue', handleStatusChange);// 組件卸載時移除監聽return () => {statusChangeEvent.off('status-changedValue', handleStatusChange);};}, []);return (<div><p>當前狀態: {status}</p>{/* 其他組件內容 */}</div>);
};

3. 優化方案(推薦)

雖然 EventEmitter 可以工作,但在 React 中更推薦使用 Context 或狀態管理庫(如 Redux)來處理跨組件狀態共享。以下是使用 Context 的替代方案:

創建狀態上下文

// StatusContext.js
import { createContext, useContext, useState } from 'react';const StatusContext = createContext();export const StatusProvider = ({ children }) => {const [status, setStatus] = useState('');return (<StatusContext.Provider value={{ status, setStatus }}>{children}</StatusContext.Provider>);
};export const useStatus = () => useContext(StatusContext);

在 Reply 組件中使用

// Reply.jsx
import { useStatus } from './StatusContext';const Reply = () => {const { setStatus } = useStatus();const changeStatus = useCallback(status => {setStatus(status);}, [setStatus]);return (<button onClick={() => changeStatus('new-status')}>更改狀態</button>);
};

在 Select 組件中使用

// Select.jsx
import { useStatus } from './StatusContext';const Select = () => {const { status } = useStatus();return (<div><p>當前狀態: {status}</p></div>);
};

在應用頂層包裹 Provider

// App.js
import { StatusProvider } from './StatusContext';function App() {return (<StatusProvider><Reply /><Select /></StatusProvider>);
}

注意事項

  1. EventEmitter 方案

    • 適合非父子組件間的通信

    • 記得在組件卸載時移除監聽器

    • 可能導致難以追蹤的數據流

  2. Context 方案

    • React 推薦的方式

    • 更易于維護和調試

    • 當狀態變化時,所有使用該狀態的組件都會重新渲染

  3. 性能考慮

    • 如果狀態更新頻繁,考慮使用 useMemo 或 React.memo 優化性能

    • 對于復雜應用,Redux 或 Zustand 可能是更好的選擇

選擇哪種方案取決于你的應用復雜度和組件結構。對于簡單場景,EventEmitter 足夠;對于更復雜的應用,推薦使用 Context 或狀態管理庫。

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

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

相關文章

1534. 統計好三元組

1534. 統計好三元組 - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 arr &#xff0c;以及 a、b 、c 三個整數。請你統計其中好三元組的數量。 如果三元組 (arr[i], arr[j], arr[k]) 滿足下列全部條件&#xff0c;則認為它是一個 好三元組 。 0 < i < j &l…

如何配置AWS EKS自動擴展組:實現高效彈性伸縮

本文詳細講解如何在AWS EKS中配置節點組&#xff08;Node Group&#xff09;和Pod的自動擴展&#xff0c;優化資源利用率并保障應用高可用。 一、準備工作 工具安裝 安裝并配置AWS CLI 安裝eksctl&#xff08;EKS管理工具&#xff09; 安裝kubectl&#xff08;Kubernetes命令…

FPGA_UART

1.UART 概述 &#xff08;通用異步收發傳輸器&#xff09; 1. 基本定義 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;是一種常見的串行通信協議&#xff0c;用于在設備間通過異步串行通信傳輸數據。它不依賴獨立的時鐘信號&#xff0c;而是通過預…

openwrt軟路由配置4--文件共享

1.安裝samba opkg update opkg install luci-app-samba4安裝好之后重啟設備&#xff0c;系統界面服務下面會多一個network shares 2.創建磁盤分區并掛載到共享目錄 openwrt剛剛安裝的時候空間都是很小的&#xff0c;共享目錄我是打算用來存放一些電影視頻之類的大文件。所以我…

Vue ‘v-model‘ directives require the attribute value which is valid as LHS.

1、問題描述 在項目開發中&#xff0c;如果將el-checkbox組件的v-model指令改為使用三元表達式時&#xff0c;會報出【vue/valid-v-model】的錯誤&#xff0c;如下圖所示&#xff1a; 2、分析原因 根據錯誤提示&#xff0c;是因為v-model指令始終把Vue實例的data視為數據真實…

基于 Qt 的 BMP 圖像數據存取至 SQLite 數據庫的實現

基于 Qt 的 BMP 圖像數據存取至 SQLite 數據庫的實現說明 本項目通過 Qt 框架實現了將 BMP 圖像文件以二進制形式存入 SQLite 數據庫&#xff0c;并可從數據庫中讀取還原為 BMP 圖像文件的功能&#xff0c;適用于需要圖像與結構化數據統一管理的場景。 整個流程分為兩個主要部…

嵌入式基礎(三)基礎外設

嵌入式基礎&#xff08;三&#xff09;基礎外設 1.什么是UART&#xff1f;與USART有什么區別??? (1)什么是UART 通用異步收發傳輸器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;通常稱作UART。是一種異步全雙工串行通信協議&#xff0c;它將要…

人力資源管理方向論文怎么寫?

目錄 一、人力資源管理方向論文選題 二、人力資源管理方向論文參考資料 隨著經濟的蓬勃發展&#xff0c;企業日益意識到引才、善用人才、留住人才對于業務發展的至關重要性。人力資源管理逐漸成為企業管理中的核心職能&#xff0c;其角色日益凸顯。近年來&#xff0c;“人力資…

機器學習 從入門到精通 day_05

1. 線性回歸 前面介紹了很多分類算法&#xff0c;分類的目標變量是標稱型數據&#xff0c;回歸是對連續型的數據做出預測。 標稱型數據&#xff08;Nominal Data&#xff09;是統計學和數據分析中的一種數據類型&#xff0c;它用于分類或標記不同的類別或組別,數據點之間并沒有…

神經子圖同構計數

摘要 本文研究了一個新的圖學習問題&#xff1a;學習計算子圖同構。與其他傳統的圖學習問題&#xff0c;如節點分類和鏈接預測不同&#xff0c;子圖同構計數是NP完全的&#xff0c;需要更多的全局推理來監督整個圖。為了使其可擴展為大規模的圖形和模式&#xff0c;我們提出了一…

開源模型應用落地-模型上下文協議(MCP)-第三方MCP Server實戰指南(五)

一、前言 在AI技術高速發展的2025年,如何讓大語言模型(LLM)更靈活地調用外部工具與數據,成為開發者關注的焦點。?模型上下文協議(MCP)?作為AI與外部資源的“萬能接口”,通過標準化交互框架解決了傳統集成中的碎片化問題。而第三方MCP Server的引入,進一步降低了開發門…

【2025年認證杯數學中國數學建模網絡挑戰賽】C題 數據預處理與問題一二求解

目錄 【2025年認證杯數學建模挑戰賽】C題數據預處理與問題一求解三、數據預處理及分析3.1 數據可視化3.2 滑動窗口相關系數統計與動態置信區間耦合分析模型3.3 耦合關系分析結果 四、問題一代碼數據預處理問題一 【2025年認證杯數學建模挑戰賽】C題 數據預處理與問題一求解 三…

AI Agent開發大全第二十八課-MCP實現本地命令調用怎么做的?

開篇 MCP很強大,Client端一旦實現了穩定的連接和執行流程后任Server端隨意改動都可兼容,這就是熱插撥功能。 如果我們僅僅滿足于MCP查點網上資料、讀點圖片即文字型的功能肯定是不能充分發揮MCP的強大之處的,正應了Google以及Anthropic最近的研究報告上說的:不要再在chat…

AJAX原理與XMLHttpRequest

目錄 一、XMLHttpRequest使用步驟 基本語法 步驟 1&#xff1a;創建 XHR 對象 步驟 2&#xff1a;調用 open() 方法 步驟 3&#xff1a;監聽 loadend 事件 步驟 4&#xff1a;調用 send() 方法 二、完整示例 1. GET 請求&#xff08;帶查詢參數&#xff09; 2. POST 請…

python寫個0~12個月寶寶喂養規劃表

下載字體&#xff1a;https://github.com/adobe-fonts/source-han-sans/releases 下載fpdf2 pip uninstall fpdf pip install fpdf2運行代碼 ?from fpdf import FPDF from fpdf.enums import XPos, YPos# 創建 PDF 類 class BabyFeedingPDF(FPDF):def header(self):self.s…

集中趨勢描述

一、集中趨勢的定義與核心目標 集中趨勢指數據向其中心值聚集的傾向,反映數據的典型水平或分布中心。其核心是通過統計指標(如眾數、中位數、均值)概括數據的核心特征,幫助快速理解數據分布的核心位置。 核心作用:簡化復雜數據、指導業務決策(如確定用戶平均消費水平)、…

【NLP】Attention機制

1.模型對比 RNN(馬爾科夫鏈式編碼) 通過遞歸計算逐個處理 token,當前編碼結果 h t h_t ht?僅依賴前一步的隱藏狀態 h t ? 1 h_{t-1} ht?1?和當前輸入 x t x_t xt?局限性:序列建模需嚴格串行,無法并行;長距離依賴易丟失(梯度消失/爆炸)例:雙向 LSTM 需正向+反向兩…

基于OpenCV與PyTorch的智能相冊分類器全棧實現教程

引言&#xff1a;為什么需要智能相冊分類器&#xff1f; 在數字影像爆炸的時代&#xff0c;每個人的相冊都存儲著數千張未整理的照片。手動分類不僅耗時&#xff0c;還容易遺漏重要瞬間。本文將手把手教你構建一個基于深度學習的智能相冊分類系統&#xff0c;實現&#xff1a;…

活動安排問題 之 前綴和與差分

文章目錄 D. Robert Hood and Mrs Hood 考慮到一個活動開始時間和結束時間s,e&#xff0c;那么可以影響到的范圍就是 s-d1,e,所以我們只需對這個每一個活動可以影響到的區域進行標記即可&#xff0c;當然為了降低時間復雜度&#xff0c;我們將使用前綴和與差分 t int(input()…

C++之 多繼承

在學校里有老師和學生&#xff0c;他們都是人&#xff0c;我么應該創建一個名為 Person 的基類和兩個名為 Teacher 和Student 的子類&#xff0c;后兩者是從前者繼承來的 有一部分學生還教課掙錢&#xff08;助教&#xff09;&#xff0c;也就是同時存在著兩個”是一個”關系&…