react api:createContext

使用 createContext 创建组件能够提供与读取的 上下文(context)。

**
const SomeContext = createContext(defaultValue)
在任意组件外调用 createContext 创建一个上下文。
import { createContext } from ‘react’;

const ThemeContext = createContext(‘light’);

defaultValue:当读取上下文的组件上方的树中没有匹配的上下文时,希望该上下文具有的默认值。倘若没有任何有意义的默认值,可指定其为 null。该默认值是用于作为“最后的手段”的后备方案。它是静态的,永远不会随时间改变。

createContext 返回一个上下文对象。

该上下文对象本身不包含任何信息。它只表示其他组件读取或提供的那个上下文。一般来说,在组件上方使用 SomeContext.Provider 指定上下文的值,并在被包裹的下方组件内调用 useContext(SomeContext) 读取它。上下文对象有一些属性:

SomeContext.Provider 让你为被它包裹的组件提供上下文的值。
SomeContext.Consumer 是一个很少会用到的备选方案,它用于读取上下文的值。

SomeContext.Provider用上下文 provider 包裹组件,以为里面所有的组件指定一个上下文的值:
function App() {
const [theme, setTheme] = useState(‘light’);
// ……
return (
<ThemeContext.Provider value={theme}>

</ThemeContext.Provider>
);
}

value:该值为想传递给所有处于这个 provider 内读取该上下文的组件,无论它们处于多深的层级。上下文的值可以为任何类型。provider 内的组件可通过调用 useContext(SomeContext) 获取上方距离它最近的上下文 provider 的 value。

children:一个函数。React 将传入与 useContext() 相同算法确定的当前上下文的值,调用该函数,并根据该函数的返回值渲染结果。当来自父组件的上下文发生变化时,React 会重新调用该函数。
**

创建上下文

**
import { createContext } from ‘react’;

const ThemeContext = createContext(‘light’);
const AuthContext = createContext(null);

function Button() {
const theme = useContext(ThemeContext);
// …
}

function Profile() {
const currentUser = useContext(AuthContext);
// …
}

function App() {
const [theme, setTheme] = useState(‘dark’);
const [currentUser, setCurrentUser] = useState({ name: ‘Taylor’ });

// …

return (
<ThemeContext.Provider value={theme}>
<AuthContext.Provider value={currentUser}>

</AuthContext.Provider>
</ThemeContext.Provider>
);
}
现在 Page 组件以及其所包裹的任何子组件,无论层级多深,都会看到传入上下文的值。如果该值发生变化, React 也会重新渲染读取该值的组件。

**

上下文之所以有用,是因为可以 提供来自其他组件的其他的、动态变化的值:

从一个文件导入和导出上下文

**
通常,来自不同文件的组件都会需要读取同一个上下文。因此,在一个单独的文件内定义上下文便成了常见做法。以使用 export 语句 将其导出,以便其他文件读取使用:

// Contexts.js
import { createContext } from ‘react’;

export const ThemeContext = createContext(‘light’);
export const AuthContext = createContext(null);

在其他文件中定义的组件可以使用 import 语句读取或提供该 context:
// Button.js
import { ThemeContext } from ‘./Contexts.js’;

function Button() {
const theme = useContext(ThemeContext);
// …
}

// App.js
import { ThemeContext, AuthContext } from ‘./Contexts.js’;

function App() {
// …
return (
<ThemeContext.Provider value={theme}>
<AuthContext.Provider value={currentUser}>

</AuthContext.Provider>
</ThemeContext.Provider>
);
}
**

我没有办法改变 context 的值

**
const ThemeContext = createContext(‘light’);
该值永远不会发生改变。当 React 无法找到匹配的 provider 时,该值会被作为后备方案。

要想使上下文的值随时间变化,添加状态并使用一个上下文 provider 包裹组件。
**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2036 [COCI2008-2009 #2] PERKET(DFS)

# [COCI2008-2009 #2] PERKET ## 题目描述 Perket 是一种流行的美食。为了做好 Perket&#xff0c;厨师必须谨慎选择食材&#xff0c;以在保持传统风味的同时尽可能获得最全面的味道。你有 n 种可支配的配料。对于每一种配料&#xff0c;我们知道它们各自的酸度 s 和苦度 b。…

深入探讨string类的奥秘

标题&#xff1a;深入探索C String类的奥秘 一、String类简介 在C编程中&#xff0c;字符串处理是非常常见的一种操作。C标准库为我们提供了一种名为String的类&#xff0c;用于处理字符串。String类在头文件中定义&#xff0c;它提供了许多成员函数和友元函数&#xff0c;使…

大模型日报2024-04-07

大模型日报 2024-04-07 大模型资讯 EURUS&#xff1a;针对推理优化的大型语言模型套件&#xff0c;取得开源模型多项基准测试的最先进成果 摘要: EURUS是一套针对推理能力进行优化的大型语言模型&#xff08;LLMs&#xff09;&#xff0c;在多项多样化的基准测试中取得了最先进…

算法练习----力扣每日一题------7

原题链接 1483. 树节点的第 K 个祖先 - 力扣&#xff08;LeetCode&#xff09; 题目解析 要求编写一个TreeAncestor类&#xff0c;需要为其写两个函数。该类是一个无规律的多叉树&#xff0c;多叉树的父节点一定是0号节点 1. TreeAncestor(int n, vector<int>&…

Android Hal service compatibility matrix

hal service 1&#xff09;增加声明xml文件 <manifest version"1.0" type"framework"><hal format"aidl"><name>ltd.faw.native_log_service</name><interface><name>INativeLogServiceInterface</name…

学习vue3第十四节 Teleport 内置组件介绍

<Teleport></Teleport> 作用目的&#xff1a; 用于将指定的组件或者元素传送到指定的位置&#xff1b; 通常是自定义的全局通用弹窗&#xff0c;绑定到 body 上&#xff0c;而不是在当前元素上面&#xff1b; 使用方法&#xff1a; 接收两个参数 to: 要将目标传…

MySQL数据库——4、数据类型

在 MySQL 数据库中&#xff0c;数据类型用于定义表中列&#xff08;字段&#xff09;可以存储的数据类型。MySQL 提供了丰富的数据类型&#xff0c;可以满足不同类型数据的存储需求。 MySQL 中一些常用的数据类型及其用途&#xff1a; 整数类型&#xff08;Integer Types&…

图片切换案例

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>图片切换案例</title> </head> …

Day105:代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

目录 代码审计-学前须知 Bluecms-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-2次注入审计分析 知识点&#xff1a; 1、PHP审计-原生态开发-SQL注入&语句监控 2、PHP审计-原生态开发-SQL注入&正则搜索 3、PHP审计-原生态开发-SQ…

LeetCode-热题100:55. 跳跃游戏

题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&…

Java文件流操作

一、文件创建和删除 public static void main(String[] args) throws IOException {File file new File("..\\hello-world.txt");//..表示在上机目录下创建hello-world.txtSystem.out.println(file.getPath());//返回当前相对路径System.out.println(file.getCanoni…

vue项目 设置浏览器地址栏图标及名称

在vue项目中&#xff0c;怎样设置浏览器tab图标及名称呢&#xff1f; 方案一 1.静态配置vue项目ico 1.1将需要展示的ico放到项目文件中 1.2在项目根目录public文件中的index.html添加如下代码 <link rel"icon" href"<% BASE_URL %>favicon.ico"…

联邦学习目前面临的挑战以及解决方案

学习目标&#xff1a; 联邦学习目前面临的挑战以及解决方案 学习内容&#xff1a; 联邦学习是一种新兴的人工智能基础技术&#xff0c;它在保障大数据交换时的信息安全、保护终端数据和个人数据隐私、保证合法合规的前提下&#xff0c;在多参与方或多计算结点之间开展高效率的…

224.0.0.1到224.0.0.9的IP地址

224.0.0.1到224.0.0.9的IP地址属于D类组播地址&#xff0c;具体含义如下&#xff1a; 224.0.0.1&#xff1a;代表本子网中的所有系统&#xff08;All Systems on this Subnet&#xff09;&#xff0c;用于向该子网上的所有主机包括路由器发送信息。224.0.0.2&#xff1a;代表本…

什么是TLB

TLB&#xff0c;全称为Translation Lookaside Buffer&#xff0c;即旁路转换缓冲或地址转换后备缓冲&#xff0c;用于加速虚拟地址到物理地址的转换过程。它是访问速度比内存快很多的高速缓存&#xff0c;用于存放最近访问的页表项的副本。在现代计算机系统中&#xff0c;使用虚…

Java 组合模式

Java设计模式 - 组合模式 组合模式是结构型模式&#xff0c;因为它创建了一组对象的树结构。 组合模式将一组对象视为单个对象。 组合模式使用一个类来表示树结构。 在组合模式中&#xff0c;我们创建一个包含自己对象的类的组。 例子 以下代码使用Employee类来演示组合模…

(学习日记)2024.04.03:UCOSIII第三十一节:信号量函数接口讲解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

c++的学习之路:13、vector(2)

本章主要是模拟实现vector&#xff0c;文章末附上代码&#xff0c;和源码。 目录 一、STL源码 二、构造与析构 三、迭代器与【】、size、capacity、empty 四、reserve与resize 五、push_back与pop_back 六、insert与erase 七、测试 1 八、代码 九、思维导图 一、STL源…

FJSP:蜣螂优化算法( Dung beetle optimizer, DBO)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题&#xff08;Flexible Job Shop Scheduling Problem&#xff0c;FJSP&#xff09;&#xff0c;是一种经典的组合优化问题。在FJSP问题中&#xff0c;有多个作业需要在多个机器上进行加工&#xff0c;每个作业由一系列工序组成&a…

2024.4.3-day08-CSS 盒子模型(溢出显示、伪元素)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业 2024.4.3-学习笔记css溢出显示单行文本溢出显示省略号多行文本溢出显示省…