react组件通信方式

打印 上一主题 下一主题

主题 1027|帖子 1027|积分 3081

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 父组件向子组件通信

  1. // ParentComponent.js
  2. import React from 'react';
  3. import ChildComponent from './ChildComponent';
  4. function ParentComponent() {
  5.   const message = 'Hello from parent!';
  6.   return (
  7.     <div>
  8.       <ChildComponent message={message} />
  9.     </div>
  10.   );
  11. }
  12. export default ParentComponent;
  13. // ChildComponent.js
  14. import React from 'react';
  15. function ChildComponent(props) {
  16.   return (
  17.     <div>
  18.       <p>{props.message}</p>
  19.     </div>
  20.   );
  21. }
  22. export default ChildComponent;
复制代码
2. 子组件向父组件通信

  1. // ParentComponent.js
  2. import React, { useState } from 'react';
  3. import ChildComponent from './ChildComponent';
  4. function ParentComponent() {
  5.   const [message, setMessage] = useState('');
  6.   const handleMessage = (msg) => {
  7.     setMessage(msg);
  8.   };
  9.   return (
  10.     <div>
  11.       <ChildComponent onMessage={handleMessage} />
  12.       <p>Message from child: {message}</p>
  13.     </div>
  14.   );
  15. }
  16. export default ParentComponent;
  17. // ChildComponent.js
  18. import React from 'react';
  19. function ChildComponent(props) {
  20.   const sendMessage = () => {
  21.     props.onMessage('Hello from child!');
  22.   };
  23.   return (
  24.     <button onClick={sendMessage}>Send Message</button>
  25.   );
  26. }
  27. export default ChildComponent;
复制代码
3. 跨级组件通信

  1. // App.js
  2. import React, { createContext, useContext } from 'react';
  3. import GrandParentComponent from './GrandParentComponent';
  4. const MessageContext = createContext();
  5. function App() {
  6.   return (
  7.     <MessageContext.Provider value={'Hello from App!'}>
  8.       <GrandParentComponent />
  9.     </MessageContext.Provider>
  10.   );
  11. }
  12. export default App;
  13. // GrandParentComponent.js
  14. import React from 'react';
  15. import ParentComponent from './ParentComponent';
  16. function GrandParentComponent() {
  17.   return (
  18.     <div>
  19.       <ParentComponent />
  20.     </div>
  21.   );
  22. }
  23. export default GrandParentComponent;
  24. // ParentComponent.js
  25. import React from 'react';
  26. import ChildComponent from './ChildComponent';
  27. import { MessageContext } from '../App';
  28. function ParentComponent() {
  29.   const message = useContext(MessageContext);
  30.   return (
  31.     <div>
  32.       <ChildComponent message={message} />
  33.     </div>
  34.   );
  35. }
  36. export default ParentComponent;
  37. // ChildComponent.js
  38. import React from 'react';
  39. function ChildComponent(props) {
  40.   return (
  41.     <div>
  42.       <p>{props.message}</p>
  43.     </div>
  44.   );
  45. }
  46. export default ChildComponent;
复制代码
4. 使用 Redux 进行全局状态管理

  1. // store.js
  2. import { createStore } from 'redux';
  3. const initialState = {
  4.   message: '',
  5. };
  6. function rootReducer(state = initialState, action) {
  7.   switch (action.type) {
  8.     case 'SET_MESSAGE':
  9.       return { ...state, message: action.payload };
  10.     default:
  11.       return state;
  12.   }
  13. }
  14. const store = createStore(rootReducer);
  15. export default store;
  16. // App.js
  17. import React from 'react';
  18. import { Provider } from 'react-redux';
  19. import store from './store';
  20. import ComponentA from './ComponentA';
  21. function App() {
  22.   return (
  23.     <Provider store={store}>
  24.       <ComponentA />
  25.     </Provider>
  26.   );
  27. }
  28. export default App;
  29. // ComponentA.js
  30. import React, { useEffect } from 'react';
  31. import { useSelector, useDispatch } from 'react-redux';
  32. function ComponentA() {
  33.   const message = useSelector(state => state.message);
  34.   const dispatch = useDispatch();
  35.   useEffect(() => {
  36.     dispatch({ type: 'SET_MESSAGE', payload: 'Hello from ComponentA!' });
  37.   }, []);
  38.   return (
  39.     <div>
  40.       <p>{message}</p>
  41.     </div>
  42.   );
  43. }
  44. export default ComponentA;
  45. // ComponentB.js
  46. import React, { useEffect } from 'react';
  47. import { useSelector, useDispatch } from 'react-redux';
  48. function ComponentB() {
  49.   const message = useSelector(state => state.message);
  50.   return (
  51.     <div>
  52.       <p>{message}</p>
  53.     </div>
  54.   );
  55. }
  56. export default ComponentB;
复制代码
5. 使用 Refs 进行组件间通信

  1. // ParentComponent.js
  2. import React, { useRef } from 'react';
  3. import ChildComponent from './ChildComponent';
  4. function ParentComponent() {
  5.   const childRef = useRef(null);
  6.   const triggerMethod = () => {
  7.     childRef.current.childMethod();
  8.   };
  9.   return (
  10.     <div>
  11.       <button onClick={triggerMethod}>Trigger Child Method</button>
  12.       <ChildComponent ref={childRef} />
  13.     </div>
  14.   );
  15. }
  16. export default ParentComponent;
  17. // ChildComponent.js
  18. import React from 'react';
  19. class ChildComponent extends React.Component {
  20.   childMethod = () => {
  21.     console.log('Called from ParentComponent');
  22.   };
  23.   render() {
  24.     return <div>Child Component</div>;
  25.   }
  26. }
  27. export default ChildComponent;
复制代码
6. 使用 Event Emitters 进行组件间通信

  1. // EventEmitter.js
  2. import Emitter from 'tiny-emitter/instance';
  3. const eventEmitter = new Emitter();
  4. export default eventEmitter;
  5. // ComponentC.js
  6. import React, { useEffect } from 'react';
  7. import eventEmitter from './EventEmitter';
  8. function ComponentC() {
  9.   useEffect(() => {
  10.     const handleEvent = (data) => {
  11.       console.log('Received data:', data);
  12.     };
  13.     eventEmitter.on('my-event', handleEvent);
  14.     return () => {
  15.       eventEmitter.off('my-event', handleEvent);
  16.     };
  17.   }, []);
  18.   return <div>Component C</div>;
  19. }
  20. export default ComponentC;
  21. // ComponentD.js
  22. import React, { useEffect } from 'react';
  23. import eventEmitter from './EventEmitter';
  24. function ComponentD() {
  25.   useEffect(() => {
  26.     eventEmitter.emit('my-event', 'Hello from ComponentD!');
  27.   }, []);
  28.   return <div>Component D</div>;
  29. }
  30. export default ComponentD;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表