react组件通信方式
创始人
2024-12-16 03:07:43
0

1. 父组件向子组件通信

// ParentComponent.js import React from 'react'; import ChildComponent from './ChildComponent';  function ParentComponent() {   const message = 'Hello from parent!';    return (     
); } export default ParentComponent; // ChildComponent.js import React from 'react'; function ChildComponent(props) { return (

{props.message}

); } export default ChildComponent;

2. 子组件向父组件通信

// ParentComponent.js import React, { useState } from 'react'; import ChildComponent from './ChildComponent';  function ParentComponent() {   const [message, setMessage] = useState('');    const handleMessage = (msg) => {     setMessage(msg);   };    return (     

Message from child: {message}

); } export default ParentComponent; // ChildComponent.js import React from 'react'; function ChildComponent(props) { const sendMessage = () => { props.onMessage('Hello from child!'); }; return ( ); } export default ChildComponent;

3. 跨级组件通信

// App.js import React, { createContext, useContext } from 'react'; import GrandParentComponent from './GrandParentComponent';  const MessageContext = createContext();  function App() {   return (                    ); }  export default App;  // GrandParentComponent.js import React from 'react'; import ParentComponent from './ParentComponent';  function GrandParentComponent() {   return (     
); } export default GrandParentComponent; // ParentComponent.js import React from 'react'; import ChildComponent from './ChildComponent'; import { MessageContext } from '../App'; function ParentComponent() { const message = useContext(MessageContext); return (
); } export default ParentComponent; // ChildComponent.js import React from 'react'; function ChildComponent(props) { return (

{props.message}

); } export default ChildComponent;

4. 使用 Redux 进行全局状态管理

// store.js import { createStore } from 'redux';  const initialState = {   message: '', };  function rootReducer(state = initialState, action) {   switch (action.type) {     case 'SET_MESSAGE':       return { ...state, message: action.payload };     default:       return state;   } }  const store = createStore(rootReducer);  export default store;  // App.js import React from 'react'; import { Provider } from 'react-redux'; import store from './store'; import ComponentA from './ComponentA';  function App() {   return (                    ); }  export default App;  // ComponentA.js import React, { useEffect } from 'react'; import { useSelector, useDispatch } from 'react-redux';  function ComponentA() {   const message = useSelector(state => state.message);   const dispatch = useDispatch();    useEffect(() => {     dispatch({ type: 'SET_MESSAGE', payload: 'Hello from ComponentA!' });   }, []);    return (     

{message}

); } export default ComponentA; // ComponentB.js import React, { useEffect } from 'react'; import { useSelector, useDispatch } from 'react-redux'; function ComponentB() { const message = useSelector(state => state.message); return (

{message}

); } export default ComponentB;

5. 使用 Refs 进行组件间通信

// ParentComponent.js import React, { useRef } from 'react'; import ChildComponent from './ChildComponent';  function ParentComponent() {   const childRef = useRef(null);    const triggerMethod = () => {     childRef.current.childMethod();   };    return (     
); } export default ParentComponent; // ChildComponent.js import React from 'react'; class ChildComponent extends React.Component { childMethod = () => { console.log('Called from ParentComponent'); }; render() { return
Child Component
; } } export default ChildComponent;

6. 使用 Event Emitters 进行组件间通信

// EventEmitter.js import Emitter from 'tiny-emitter/instance';  const eventEmitter = new Emitter();  export default eventEmitter;  // ComponentC.js import React, { useEffect } from 'react'; import eventEmitter from './EventEmitter';  function ComponentC() {   useEffect(() => {     const handleEvent = (data) => {       console.log('Received data:', data);     };      eventEmitter.on('my-event', handleEvent);      return () => {       eventEmitter.off('my-event', handleEvent);     };   }, []);    return 
Component C
; } export default ComponentC; // ComponentD.js import React, { useEffect } from 'react'; import eventEmitter from './EventEmitter'; function ComponentD() { useEffect(() => { eventEmitter.emit('my-event', 'Hello from ComponentD!'); }, []); return
Component D
; } export default ComponentD;

相关内容

热门资讯

每日必备!小白大作战外挂(都是... 每日必备!小白大作战外挂(都是有挂)详细透明挂教程1、打开软件启动之后找到中间准星的标志长按。2、然...
一分钟教会你!南宁老友麻将十三... 一分钟教会你!南宁老友麻将十三张(辅助挂)透明挂透视辅助脚本(2025已更新)(哔哩哔哩);1、打开...
七分钟教程!欢乐斗地主建房,优... 七分钟教程!欢乐斗地主建房,优乐麻将有没有挂(一直是真的有挂)1)优乐麻将有没有挂辅助挂:进一步探索...
1分钟揭秘!家家乐牌吧肃宁填坑... 1分钟揭秘!家家乐牌吧肃宁填坑有挂吗,同城游双扣真是真的有挂,科技教程(有挂普及)1、1分钟揭秘!家...
玩家必备教程!!博雅红河有挂吗... 玩家必备教程!!博雅红河有挂吗(透视辅助)透视辅助脚本(2021已更新)(哔哩哔哩)1、博雅红河有挂...
每日必备!哥哥跑得快有辅助挂吗... 每日必备!哥哥跑得快有辅助挂吗(确实真的是有挂)详细透视辅助教程1、超多福利:超高返利,海量正版游戏...
八分钟解说!闽游福建麻将有挂吗... 八分钟解说!闽游福建麻将有挂吗,微信边锋斗地主小程序有挂吗(其实有挂辅助挂)1.微信边锋斗地主小程序...
2分钟普及!威胁你潮汕麻将有挂... 2分钟普及!威胁你潮汕麻将有挂的吗,手机浙江宝宝麻将其实有挂辅助挂,分享教程(有挂秘籍);威胁你潮汕...
热点推荐!!八闽状元郎有挂吗(... 热点推荐!!八闽状元郎有挂吗(透视)透视辅助神器(2021已更新)(哔哩哔哩)所有人都在同一条线上,...
重大通报!海南手机麻将有挂的么... 重大通报!海南手机麻将有挂的么(竟然是有挂)详细透视辅助教程进入游戏-大厅左侧-新手福利-激活码辅助...