React 之 组件之间共享值useContext使用(十五)

1. useContext 是 React 中的一个 Hook,它允许你在组件之间共享值,而不必显式地通过组件树逐层传递 props。当你想要在整个应用程序中传递数据时,使用 useContext 可以使代码更加简洁和易于维护
2. 相当于vue的依赖注入模式:Provide / Inject

useContext 需要与 React.createContext() 一起使用。React.createContext() 会返回一个新的 React Context 对象。这个对象有两个属性:Provider 和Consumer。但是,useContext Hook 使得我们可以直接访问 Context 的值,而不需要使用 Consumer。

使用 useContext 的代码栗子:

javascript 复制代码
import React, { createContext, useContext, useState } from 'react';  

父组件:ThemeProvider
// 创建一个新的 Context 对象  
const ThemeContext = createContext();  
  
// ThemeProvider 组件,用于包裹子组件,并提供一个 theme 属性  
function ThemeProvider({ children }) {  
  const [theme, setTheme] = useState('light');  
  
  // 返回一个对象,该对象会被 ThemeContext.Provider 使用  
  // 这样,所有 ThemeProvider 的子组件(包括嵌套组件)都可以访问到 theme 和 setTheme  
  return (  
    <ThemeContext.Provider value={{ theme, setTheme }}>  
      {children}  
    </ThemeContext.Provider>  
  );  
}  
 
子组件:ThemedButton
// 使用 useContext 访问 ThemeContext 的值  
function ThemedButton() {  
  // 使用 useContext Hook 获取 ThemeContext 的值  
  const { theme, setTheme } = useContext(ThemeContext);  
  
  return (  
    <button  
      onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}  
      style={{ background: theme }}  
    >  
      Toggle Theme  
    </button>  
  );  
}  
  
function App() {  
  return (  
    <ThemeProvider>  
      <ThemedButton />  
    </ThemeProvider>  
  );  
}  
  
export default App;
相关推荐
IT_陈寒35 分钟前
Vite的public文件夹放静态资源?这坑我替你踩了
前端·人工智能·后端
涵涵(互关)1 小时前
GoView各项目文件中的相关语法2
前端·javascript·vue.js
子兮曰1 小时前
别让爬虫白嫖你的导航站了:纯免费,手把手实现加密字体防爬
前端·javascript·后端
小村儿1 小时前
连载06 - Hooks 源码深度解析:Claude Code 的确定性自动化体系
前端·后端·ai编程
心中无石马1 小时前
uniapp引入tailwindcss4.x
前端·css·uni-app
焰火19992 小时前
[Vue]可重置的响应式状态reactive
前端·vue.js
陆枫Larry2 小时前
CSS transform scale:图片放大效果背后的原理
前端
昇腾CANN2 小时前
TileLang-Ascend 算子性能优化方法与实操
开发语言·javascript·性能优化·昇腾·cann
老王以为2 小时前
为什么 React 和 Vue 不一样?
前端·vue.js·react.js
web打印社区2 小时前
2026最新Web静默打印解决方案,无插件无预览,完美替代Lodop
前端·javascript·vue.js·electron·pdf