【react】react 使用 Context 的简单示例

React的Context API是一种在组件树中传递数据的方法,它允许你将数据从顶层组件传递到底层组件,而无需手动在每个层级传递props。

目录

  • 1 创建 Context
  • 2 提供 Context 值
  • 3 消费 Context 值
  • 4 不是子组件能通过Consumer获取吗?

1 创建 Context

import React from 'react';// 创建一个Context对象,可以提供一个默认值
const ThemeContext = React.createContext('light'); // 默认主题为'light'

2 提供 Context 值

你需要在组件树中较高层级包裹一个 Provider 组件,并传递一个 value 属性,这样其所有子组件都可以访问这个值。

import React, { Component } from 'react';
import ThemeContext from './ThemeContext'; // 假设你已经创建了ThemeContextclass App extends Component {render() {// 这里定义了主题为'dark'const theme = 'dark';return (<ThemeContext.Provider value={theme}><YourComponent /> {/* 任何需要访问主题的组件 */}</ThemeContext.Provider>);}
}export default App;

3 消费 Context 值

组件可以通过 Context.Consumer 订阅这个值,或者使用 useContext Hook(在函数组件中)来访问。

使用 Context.Consumer 的方式:

import React, { Component } from 'react';
import ThemeContext from './ThemeContext';class YourComponent extends Component {render() {return (<ThemeContext.Consumer>{theme => (<div>The theme is {theme}</div> // theme 就是从Provider传来的值)}</ThemeContext.Consumer>);}
}export default YourComponent;

使用 useContext Hook 的方式(在函数组件中):

import React, { useContext } from 'react';
import ThemeContext from './ThemeContext';function YourComponent() {const theme = useContext(ThemeContext); // theme 就是从Provider传来的值return <div>The theme is {theme}</div>;
}export default YourComponent;

在这个例子中,context.theme 的值是由 App 组件中的 Provider 通过 value 属性提供的,它被设置为 ‘dark’。然后,YourComponent 组件通过 Context.Consumer 或 useContext 来访问这个值,并将其显示在渲染的元素中。

4 不是子组件能通过Consumer获取吗?

Context.Consumer 可以被任何组件使用,无论是子组件还是兄弟组件,甚至是更深层次的后代组件。Context.Consumer 允许你在组件树中任何位置订阅Context的值,只要这个组件位于提供该Context的 Provider 组件之下。

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

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

相关文章

用python把docx批量转为pdf

为保证转换质量&#xff0c;本文的方法是通过脚本和com技术调用office自带的程序进行转换的&#xff0c;因此需要电脑已经装有office。如果希望不装office也能用&#xff0c;则需要研究OpenXML技术&#xff0c;后面实在闲的慌&#xff08;退休&#xff09;再搞。 安装所需库 …

Linux---​代码运行-程序的翻译过程

前言 我们平常用C/C语言写代码的时候&#xff0c;运行只是靠编译器&#xff0c;点一下运行按钮就会出现我们代码运行的结果&#xff0c;那我们的代码究竟是怎么得到最终结果的呢&#xff1f;还是非常值得我们去了解与学习的。 一、翻译过程 > 预处理 预处理功能主要包括宏…

智能合约与身份验证:区块链技术的创新应用

一、引言 区块链&#xff0c;一个近年来备受瞩目的技术名词&#xff0c;已经从最初的数字货币领域扩展到了众多行业。那么&#xff0c;究竟什么是区块链&#xff1f;它为何如此重要&#xff1f;本文将深入剖析区块链技术的原理、应用及未来发展。 二、区块链的基本概念 区块…

BeanFactory和FactoryBean的区别:

BeanFactory和FactoryBean的区别&#xff1a; BeanFactory和FactoryBean是Spring框架中两个不同的概念&#xff0c;它们的作用和使用方式有所不同。 1. BeanFactory&#xff08;普通Bean工厂/我们所用的都是Bean工厂创建的&#xff09;是Spring框架的核心接口之一&#xff0c…

java第二十三课 —— 继承

面向对象的三大特征 继承 继承可以解决代码复用&#xff0c;让我们的编程更加靠近人类思维&#xff0c;当多个类存在相同的属性&#xff08;变量&#xff09;和方法时&#xff0c;可以从这些类中抽象出父类&#xff0c;在父类中定义这些相同的属性和方法&#xff0c;所有的子…

【JavaScript脚本宇宙】从简到繁:理解六种关键的拖放排序解决方案

前端开发利器&#xff1a;最佳拖放排序库全面解析 前言 在现代Web开发中&#xff0c;拖放排序功能已经成为许多应用程序的必备功能。无论是任务管理工具、电子商务网站还是内容管理系统&#xff0c;都需要一种高效且用户友好的方式来实现元素的重新排序。本文将详细介绍六种流…

虚拟淘宝-Virtual-Taobao论文解读(AAAI2019)

目录 1 论文简介 2 文章的主要贡献 3 文章技术的简要说明 4 技术的详细说明 4.1 GAN-SD&#xff1a;生成客户特征 4.2 MAIL&#xff1a;生成交互过程 4.3 ANC&#xff1a;动规范约束 5 实验设定及结果 6 结论 7 参考 1 论文简介 南京大学LAMDA团队的侍竞成、俞扬等…

【服务器硬件由 CPU、RAM、硬盘等组成,选购时需考虑应用需求、预算等。散热、安全、监控与维护亦重要,未来发展趋势包括高性能、低能耗和智能化。】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

MySQL----索引的底层实现和原理

索引 在前面的文章中&#xff0c;我们分析了索引的分类、创建、删除以及索引的创建原则等&#xff0c;知道了创建索引的目的就是为了加速对表中的数据行的检索而创造的一种分散存储的数据结构。那么索引的底层结构是什么呢&#xff1f; 底层实现 数据库索引是存储在磁盘上的…

PDF标准详解(三)—— PDF坐标系统和坐标变换

之前我们了解了PDF文档的基本结构&#xff0c;并且展示了一个简单的hello world。这个hello world 虽然只在页面中显示一个hello world 文字&#xff0c;但是包含的内容却是不少。这次我们仍然以它为切入点&#xff0c;来了解PDF的坐标系统以及坐标变换的相关知识 图形学中二维…

OpenCV学习(4.15) 基于 GrabCut 算法的交互式前景提取

1. 目标 在这一章当中 我们将看到 GrabCut 算法来提取图像中的前景我们将为此创建一个交互式应用程序。 2. 理论 GrabCut 算法由英国剑桥微软研究院 Carsten Rother&#xff0c;Vladimir Kolmogorov和Andrew Blake发明&#xff0c;并在他们的论文“GrabCut”&#xff1a;使…

MySQL的高可用方案:深入Galera Cluster和ProxySQL

一、引言 1.1 背景和重要性 随着互联网的发展与普及,数据库作为后端存储的重要组件,其稳定性、可用性和性能直接影响到一个系统的正常运行。特别是在高并发、大数据的现今环境下,一款高性能、高可用率的数据库系统更是大大提升了业务的效率和保障。 MySQL是一款广受欢迎…

MAC使用初体验+入门

之前从来没有使用过MAC&#xff0c;这次拿到了一个 不得不说MAC度过适应期后用起来很舒服&#xff0c;续航长&#xff0c;触控板舒服&#xff0c;轻薄无比 我前期过度的时候记录的一部分快速指南&#xff0c;掌握如下一些电脑常识 可以做到正常使用了 基本操作 在 Mac 上使用桌…

LLM之RAG实战(四十)| 使用LangChain SQL Agent和MySQL搭建多层RAG ChatBot

在传统的意义上&#xff0c;RAG 主要是从文档中检索用户想要的数据&#xff0c;从而提高大模型的能力&#xff0c;减少幻觉问题。今天&#xff0c;我们从另一个维度介绍RAG&#xff0c;RAG不从文档中获取数据&#xff0c;而是从MySQL数据库检索数据。我们可以使用LangChain SQL…

web前端技术推荐:构建卓越用户体验的必备工具与策略

web前端技术推荐&#xff1a;构建卓越用户体验的必备工具与策略 在日新月异的互联网时代&#xff0c;Web前端技术扮演着至关重要的角色。它们不仅影响着网站的外观和交互性&#xff0c;还直接关系到用户体验和业务成果。本文将从四个方面、五个方面、六个方面和七个方面&#…

Vue40-vueComponent构造函数

一、组件的本质&#xff1a;VueComponent构造函数 组件的本质是&#xff1a;构造函数 二、每一次调用vue.extend&#xff0c;返回的事一个全新的 VueComponent VueComponent的源码如下&#xff1a; 三、组件中的this 组件中的this是VueComponent实例对象&#xff0c;结构和vm…

如果给电商系统颜值搞排名,我觉得淘宝千牛系统是天花板了。

淘宝的商家操作界面-千牛系统经过多年的迭代&#xff0c;无论从颜值上、功能上还是用户体验上都是行业天花板的存在&#xff0c;我截图软件上的一些图给大家分享下。

快速提高MySQL查询效率的实用方法

快速提高MySQL查询效率的实用方法包括以下几个方面&#xff0c;下面将详细列举并解释&#xff1a; 使用合适的索引 索引可以大大提高查询的速度&#xff0c;允许数据库系统快速定位和访问特定的数据行。在经常用于WHERE子句、JOIN操作和ORDER BY排序的列上创建索引。避免创建过…

网络编程之XDP和TC

一、TC之于XDP 在前面分析过XDP&#xff0c;今天简单分析一下与其相关的TC&#xff0c;即traffic control,流量控制。在分析XDP时知道其只能用于ingress方向触发&#xff0c;而TC却可以在两个方向即ingress和egress方向触发。也可以简单理解成它可以同时钩住进出两个方向的数据…

C 语言实例 - 输出数组

使用 for 循环输出数组 #include <stdio.h>int main() {int array[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};int loop;for(loop 0; loop < 10; loop)printf("%d ", array[loop]);return 0; }输出结果为&#xff1a; 1 2 3 4 5 6 7 8 9 0使用 for 循环逆向输…