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;
相关推荐
web130933203982 分钟前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_23423 分钟前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
如若1231 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~2 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语2 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport2 小时前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap
brrdg_sefg2 小时前
WEB 漏洞 - 文件包含漏洞深度解析
前端·网络·安全
胡西风_foxww2 小时前
【es6复习笔记】rest参数(7)
前端·笔记·es6·参数·rest
m0_748254882 小时前
vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0
前端·vue.js·elementui
星就前端叭3 小时前
【开源】一款基于Vue3 + WebRTC + Node + SRS + FFmpeg搭建的直播间项目
前端·后端·开源·webrtc