Context 提供了一种在组件树中共享数据的方式,无需通过 props 逐层传递。

示例 1: 基本用法

👤

张三

管理员

欢迎回来,张三

const UserContext = createContext(null);

// 提供数据
<UserContext.Provider value={user}>
  <App />
</UserContext.Provider>

// 消费数据
function Component() {
  const user = useContext(UserContext);
  return <p>{user.name}</p>;
}

示例 2: 主题切换

主题卡片

当前主题:light

function ThemeProvider({ children }) {
  const [theme, setTheme] = useState('light');
  const toggleTheme = () => setTheme(t =>
    t === 'light' ? 'dark' : 'light'
  );

  return (
    <ThemeContext.Provider value={{ theme, toggleTheme }}>
      {children}
    </ThemeContext.Provider>
  );
}

示例 3: Context + useReducer

商品列表

React 入门

¥49

TypeScript 精通

¥69

Next.js 实战

¥89

购物车

购物车为空
优势: useReducer + Context 适合管理复杂状态逻辑,状态更新集中在 reducer 中处理。

示例 4: 多层 Context

欢迎!

请登录以查看更多内容

<LanguageContext.Provider value={language}>
  <AuthContext.Provider value={auth}>
    <App />
  </AuthContext.Provider>
</LanguageContext.Provider>

示例 5: 避免 Prop Drilling

Level 1

Level 2

Level 3

👤张三(深层组件直接访问)
优势: 深层嵌套的组件可以直接通过 Context 访问数据,无需逐层传递 props。中间的 Level1、Level2、Level3 组件完全不需要知道 user 的存在。