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

本文主要是介绍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;

这篇关于React 之 组件之间共享值useContext使用(十五)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973634

相关文章

hadoop2.0核心组件

hdfs:(分布式文件系统):解决海量数据存储。 yarn:(作业调度和集群资源管理的框架):解决资源任务调度。 mapreduce:(分布式运算编程框架):解决海量数据计算。

使用Array实现Java堆栈

本教程给出了使用Array 实现Stack数据结构的示例。堆栈提供将新对象放在堆栈上(方法push())并从堆栈中获取对象(方法pop())。堆栈根据后进先出(LIFO)返回对象。请注意,JDK提供了一个默认的Java堆栈实现作为类java.util.Stack。 适用于所有堆栈实现的两个强制操作是: push():数据项放置在堆栈指针指向的位置。pop():从堆栈指针指向的位置删除并返回数据

Spring Boot - 使用类类型信息获取所有已加载的bean

Spring启动会在内部加载大量bean,以最少的配置运行您的应用程序。在这个例子中,我们将学习如何找出所有那些Spring boot加载的bean及其类类型信息。 使用ApplicationContext获取所有已加载的bean 要自动执行方法,当应用程序完全加载时,我正在使用CommandLineRunner接口。CommandLineRunner用于指示bean 在Spring应用程序中

使用ThreadPoolExecutor创建线程池有哪些关键参数

1、ThreadPoolExecutor类的全参数构造方法: /*** Creates a new {@code ThreadPoolExecutor} with the given initial* parameters.** @param corePoolSize the number of threads to keep in the pool, even* if they

关于HTML的多媒体标签

代码示例如下: <!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus?"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Descriptio

关于HTML的框架标签及内嵌框架

框架标签的代码示例如下: <!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus?"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Desc

关于HTML的表格标签

代码示例如下: <!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus?"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Descriptio

关于HTML的清单标签

代码示例如下: <!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus?"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Descriptio

关于HTML的图片标签

代码示例如下: <!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus?"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Descriptio

关于HTML的字体标签

代码示例如下: <!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus?"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Descripti