欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > React组件通信——context(提供者/消费者)

React组件通信——context(提供者/消费者)

2025/9/21 9:52:01 来源:https://blog.csdn.net/anxinbuxinan/article/details/148667904  浏览:    关键词:React组件通信——context(提供者/消费者)

Context 是 React 提供的一种组件间通信方式,主要用于解决跨层级组件 props 传递的问题。它允许数据在组件树中"跨级"传递,无需显式地通过每一层 props 向下传递。

一、Context 核心概念

1. 基本组成

  • React.createContext:创建 Context 对象

  • Context.Provider:提供数据的组件

  • Context.Consumer 或 useContext:消费数据的组件

2. 工作原理

二、示例

创建 Context 文件(独立模块)

// contexts/ThemeContext.js
import { createContext } from 'react';// 1. 创建Context并导出
const ThemeContext = createContext('light'); // 默认值// 2. 导出Provider组件
export const ThemeProvider = ThemeContext.Provider;// 3. 直接导出Context对象
export default ThemeContext;

提供者文件

// App.js
import React, { useState } from "react";
import { ThemeProvider } from "./contexts/ThemeContext";
import ThemedButton from "./ThemeButton";function App() {const [theme, setTheme] = useState("dark");return (<ThemeProvider value={theme}><ThemedButton /><button onClick={() => setTheme(theme === "dark" ? "light" : "dark")}>切换主题</button></ThemeProvider>);
}export default App;

消费者文件

// ThemedButton.js
import React, { useContext } from "react";
import ThemeContext from "./contexts/ThemeContext";function ThemedButton() {// 方式一:使用从Context文件导入的同一个Context对象const theme = useContext(ThemeContext);return (<div><buttonstyle={{background: theme === "dark" ? "#333" : "#EEE",color: theme === "dark" ? "white" : "black",}}>当前主题: {theme}</button>{/* 方式二:适用于class组件 */}<ThemeContext.Consumer>{(theme) => {return (<buttonstyle={{background: theme === "dark" ? "#333" : "#EEE",color: theme === "dark" ? "white" : "black",}}>当前主题: {theme}</button>);}}</ThemeContext.Consumer></div>);
}export default ThemedButton;

版权声明:

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

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

热搜词