Context 是 React 提供的跨层级数据传递机制,用于避免 props drilling,由 createContext、Provider 和 useContext 三部分组成,需谨慎使用以防性能问题。
JavaScript 本身没有原生的 Context API,这个概念是 React 框架提供的高级特性,用于跨层级组件之间安全、高效地传递数据,避免“props drilling”(层层透传 props)。它不是浏览器或 JS 引擎的标准 API,而是 React 的内置机制。
当多个嵌套组件都需要访问同一个数据(比如用户登录状态、主题色、语言偏好),如果每次都通过 props 一层层往下传,代码会变得冗长、脆弱且难以维护。Context 就是为了解决这个问题:它创建一个“数据通道”,让任意后代组件都能订阅并使用这个数据,且在数据变化时自动更新。
它由三部分组成:
Provider 和 Consumer,新版推荐用 useContext)
基本用法:三步走以「主题色」为例:
const ThemeContext = React.createContext();
{...} }}>
import { useContext } from 'react';
function Button() {
const { theme } = useContext(ThemeContext);
return ;
}
Context 不是万能的,滥用反而影响性能和可读性:
UserContext、ThemeContext),或用 useMemo 稳定 value 引用useContext(违反 Hook 规则)static contextType = MyContext 或 ,但推荐统一用 Hook如果你问的是“纯 JavaScript 中如何模拟 context 行为”,那可以借助闭包 + 模块作用域实现轻量级上下文:
// config.js
let currentContext = { locale: 'zh-CN', user: null };
export function setContext(ctx) { currentContext = { ...currentContext, ...ctx }; }
export function getContext() { return { ...currentContext }; }
但这只是简易状态快照,不具备 React 的响应式更新能力。真要跨组件通信,还是得依赖框架或状态库(如 Zustand、Jotai)。
基本上就这些。Context 是 React 数据流的重要拼图,用对了很省心,乱用容易埋雷。记住核心:少而精,按需提供,稳定引用。