useContext 用于跨组件共享数据,避免 props 层层传递(Props Drilling)。

useContext Hook 详解

useContext 用于跨组件共享数据,避免 props 层层传递。

// 基本用法

// 1. 创建 Context
const ThemeContext = createContext('light');

// 2. 提供 Context
<ThemeContext.Provider value={theme}>
  <App />
</ThemeContext.Provider>

// 3. 消费 Context
const theme = useContext(ThemeContext);

示例 1: 主题切换

当前主题:☀️浅色

结构:

<ThemeProvider>
  <ThemedBox />      {/* 消费 theme */}
  <ThemeToggleButton /> {/* 消费 theme + toggleTheme */}
</ThemeProvider>

示例 2: 用户认证

未登录
说明: UserInfo 和 LoginButtons 都通过 useUser() 访问同一个用户状态

示例 3: 多层嵌套

主题: light

用户: 未登录

语言: 中文

嵌套结构:

<ThemeProvider>
  <UserProvider>
    <LanguageContext.Provider>
      <NestedComponent />
    </LanguageContext.Provider>
  </UserProvider>
</ThemeProvider>

示例 4: Props Drilling 对比

❌ Props Drilling

Level 1 (接收 theme prop)

Level 2 (传递 theme prop)

Level 3 (使用 theme)

Theme: dark

✅ useContext

Level 1 (无需 props)

Level 2 (无需 props)

Level 3 (useContext)

Theme: light