您的位置:首页 > 科技 > IT业 > React 组件通信-案例

React 组件通信-案例

2024/10/7 4:34:17 来源:https://blog.csdn.net/m0_72560900/article/details/139898238  浏览:    关键词:React 组件通信-案例

React 组件通信是构建复杂应用的核心部分,涉及到不同组件之间的数据传递和事件处理。以下提供了相应的案例代码。

1. 父组件向子组件传递数据(父传子)

父组件通过 props 向子组件传递数据。

// ParentComponent.js
import React from 'react';
import ChildComponent from './ChildComponent';function ParentComponent() {const message = "Hello from Parent";return <ChildComponent message={message} />;
}export default ParentComponent;// ChildComponent.js
import React from 'react';function ChildComponent(props) {return <div>{props.message}</div>;
}export default ChildComponent;

2. 子组件向父组件传递数据(子传父)

子组件通过回调函数向父组件传递数据。

// ParentComponent.js
import React, { useState } from 'react';
import ChildComponent from './ChildComponent';function ParentComponent() {const [message, setMessage] = useState("");const handleMessageChange = (newMessage) => {setMessage(newMessage);};return (<div><ChildComponent onMessageChange={handleMessageChange} /><p>Message from child: {message}</p></div>);
}export default ParentComponent;// ChildComponent.js
import React from 'react';function ChildComponent({ onMessageChange }) {const handleChange = (e) => {onMessageChange(e.target.value);};return <input type="text" onChange={handleChange} />;
}export default ChildComponent;

3. 兄弟组件之间的通信

通过共同的父组件作为中介,将数据或回调函数传递给兄弟组件。

// ParentComponent.js
import React, { useState } from 'react';
import FirstSibling from './FirstSibling';
import SecondSibling from './SecondSibling';function ParentComponent() {const [message, setMessage] = useState("");const handleMessageChange = (newMessage) => {setMessage(newMessage);};return (<div><FirstSibling onMessageChange={handleMessageChange} /><SecondSibling message={message} /></div>);
}export default ParentComponent;// FirstSibling.js
import React from 'react';function FirstSibling({ onMessageChange }) {const handleChange = (e) => {onMessageChange(e.target.value);};return <input type="text" onChange={handleChange} />;
}export default FirstSibling;// SecondSibling.js
import React from 'react';function SecondSibling({ message }) {return <p>Message from FirstSibling: {message}</p>;
}export default SecondSibling;

4. 跨层级组件通信

使用 Context API 或者全局状态管理库(如 Redux)进行跨层级组件通信。

使用 Context API
// ThemeContext.js
import React, { createContext, useState, useContext } from 'react';const ThemeContext = createContext();export function ThemeProvider({ children }) {const [theme, setTheme] = useState("light");return (<ThemeContext.Provider value={{ theme, setTheme }}>{children}</ThemeContext.Provider>);
}export function useTheme() {return useContext(ThemeContext);
}// App.js
import React from 'react';
import { ThemeProvider } from './ThemeContext';
import ChildComponent from './ChildComponent';function App() {return (<ThemeProvider><ChildComponent /></ThemeProvider>);
}export default App;// ChildComponent.js
import React from 'react';
import { useTheme } from './ThemeContext';function ChildComponent() {const { theme, setTheme } = useTheme();const toggleTheme = () => {setTheme((prevTheme) => (prevTheme === "light" ? "dark" : "light"));};return (<div><p>Current theme: {theme}</p><button onClick={toggleTheme}>Toggle Theme</button></div>);
}export default ChildComponent;

5. 使用第三方库进行通信

使用第三方库如 redux 进行全局状态管理,实现任意组件之间的通信。

  • 暂无案例

这些例子展示了在 React 中常见的不同组件通信方式,根据实际场景选择合适的通信方式能够有效提高代码的可维护性和可扩展性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com