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 的代码栗子:

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;

相关推荐

  1. React 组件之间共享useContext使用

    2024-05-10 10:36:06       36 阅读
  2. reactuseContext

    2024-05-10 10:36:06       47 阅读
  3. React useContext

    2024-05-10 10:36:06       32 阅读
  4. reactuseContext全局状态管理

    2024-05-10 10:36:06       69 阅读
  5. vue3使用mitt用于组件之间

    2024-05-10 10:36:06       55 阅读
  6. React】在 React 组件中,怎么使用useContext

    2024-05-10 10:36:06       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 10:36:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 10:36:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 10:36:06       82 阅读
  4. Python语言-面向对象

    2024-05-10 10:36:06       91 阅读

热门阅读

  1. Node.js爬虫在租房信息监测与分析中的应用

    2024-05-10 10:36:06       32 阅读
  2. uniapp app端如何使用live-pusher实现camera效果

    2024-05-10 10:36:06       26 阅读
  3. 安卓uir转二维码保存本地

    2024-05-10 10:36:06       35 阅读
  4. 基本数据类型

    2024-05-10 10:36:06       29 阅读
  5. ora2pg 从Oracle迁移到opengauss

    2024-05-10 10:36:06       30 阅读
  6. SSH简介

    2024-05-10 10:36:06       31 阅读
  7. Django用户登录后的‘重定向’

    2024-05-10 10:36:06       28 阅读
  8. 信创对医疗信息化的要求

    2024-05-10 10:36:06       27 阅读
  9. 算法和数据结构学习

    2024-05-10 10:36:06       27 阅读