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;

相关内容

热门资讯

玩家必看科普!胡莱三国辅助工具... 玩家必看科普!胡莱三国辅助工具(辅助挂)果然有开挂辅助脚本(有挂教学)暗藏猫腻,小编详细说明胡莱三国...
揭秘一下!丰县14张脚本(辅助... 揭秘一下!丰县14张脚本(辅助挂)一向有开挂辅助黑科技(有挂分享)是一款可以让一直输的玩家,快速成为...
发现一款!微乐小程序修复系统有... 您好,微乐小程序修复系统有用吗这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很...
揭秘一下!aapoker怎么开... 揭秘一下!aapoker怎么开辅助器,pokermaster脚本(透视)固有有开挂辅助神器(有开挂工...
一分钟了解!河洛杠次脚本入口在... 一分钟了解!河洛杠次脚本入口在哪(辅助挂)果然有开挂辅助工具(有挂存在);一、河洛杠次脚本入口在哪A...
让我来分享经验!创思维辅助软件... 让我来分享经验!创思维辅助软件(辅助挂)先前有开挂辅助插件(有挂教学)是一款可以让一直输的玩家,快速...
发现一款!微乐麻将脚本掌上程序... 发现一款!微乐麻将脚本掌上程序,雀姬辅助器,细节揭秘(有挂方式);发现一款!微乐麻将脚本掌上程序,雀...
推荐一款!佛手在线有挂吗,德州... 推荐一款!佛手在线有挂吗,德州透视是真的假的(透视)切实有开挂辅助软件(有开挂攻略)是一款可以让一直...
科技介绍!越乡游辅助工具(辅助... 科技介绍!越乡游辅助工具(辅助挂)果然有开挂辅助脚本(有挂解密)科技介绍!越乡游辅助工具(辅助挂)果...
普及知识!拱趴大菠萝修改器(辅... 普及知识!拱趴大菠萝修改器(辅助挂)原本有开挂辅助神器(有挂教学),拱趴大菠萝修改器是用手机号来登录...