Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第二章:React Hooks

第二章:React Hooks

useContext

什么是 useContext?

useContext 是 React 提供的一个 Hook,用于在函数组件中访问 React 的 Context。Context 提供了一种在组件树中共享数据的方式,避免了通过 props 层层传递数据的繁琐。

基本用法

  1. 创建 Context
    使用 React.createContext 创建一个 Context 对象:

    const MyContext = React.createContext(defaultValue);
    
  2. 提供 Context
    使用 Context.Provider 包裹组件树,并通过 value 属性传递数据:

    <MyContext.Provider value={someValue}>
      <ChildComponent />
    </MyContext.Provider>
    
  3. 消费 Context
    在子组件中使用 useContext 获取 Context 的值:

    const value = useContext(MyContext);
    

示例代码

import React, { useContext, createContext } from 'react';

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

function App() {
  return (
    // 2. 提供 Context
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}

function Toolbar() {
  return <ThemedButton />;
}

function ThemedButton() {
  // 3. 消费 Context
  const theme = useContext(ThemeContext);
  return <button style={{ background: theme === 'dark' ? '#333' : '#eee' }}>Themed Button</button>;
}

适用场景

  1. 全局状态管理
    比如主题、用户登录状态、语言偏好等需要在多个组件中共享的数据。
  2. 避免 Prop Drilling
    当需要跨多层组件传递数据时,Context 可以替代手动传递 props。

注意事项

  1. 性能优化
    Context 的值变化时,所有消费该 Context 的组件都会重新渲染。可以通过拆分 Context 或结合 useMemo 优化性能。
  2. 默认值
    如果组件没有匹配到 Provider,useContext 会返回创建 Context 时传入的默认值。

与其他 Hook 结合

useContext 常与其他 Hook 配合使用,比如:

  • 结合 useReducer 实现轻量级状态管理。
  • 结合自定义 Hook 封装复杂的 Context 逻辑。

总结

useContext 是 React 中简化跨组件数据共享的重要工具,合理使用可以大幅提升代码的可维护性。但需注意避免滥用,以免导致组件过度耦合。

Last Updated:: 7/1/25, 3:39 PM