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

embedded/2024/10/18 10:14:40/

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

目录

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

1 创建 Context

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

2 提供 Context 值

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

javascript">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 的方式:

javascript">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 的方式(在函数组件中):

javascript">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.ppmy.cn/embedded/48695.html

相关文章

vue2+element 组件封装使用

1.图片上传组件 使用 <el-descriptions-item label"附件图片" :span"3"><ImageUpload v-model"picUrl" :fileSize"0" getImg"getImg"></ImageUpload></el-descriptions-item> // 图片getImg(val)…

【数学】什么是马尔可夫链?RNN 与马尔可夫链的联系,马尔可夫链与条件随机场的比较

文章目录 马尔可夫链背景公式示例题目详细讲解Python代码求解实际生活中的例子 RNN 与马尔可夫链的联系对比总结图示解释 马尔可夫链与条件随机场的比较条件随机场 (Conditional Random Field, CRF)马尔可夫链与 CRF 的联系马尔可夫链隐马尔可夫模型 (HMM)条件随机场 (CRF) 举例…

Java课程设计:基于swing的学生信息管理系统

文章目录 一、项目介绍二、项目展示三、源码展示四、源码获取 一、项目介绍 这款Java swing实现的学生信息管理系统和jsp版本的功能很相似&#xff0c;简单的实现了班级信息的增删改查&#xff0c;学生信息的增删改查&#xff0c;数据库采用的是mysql&#xff0c;jdk版本不限&…

关于ReactV18的页面跳转传参和接收

一、使用路由方式进行传参和接收&#xff08;此处需使用 useNavigate 和 useParams 两个hooks&#xff09; 1 首先需要配置好路由形式如下 :id(参数) { path: "/articleDetail/:id", element: lazyElement(<ArticleDetail />), }, 2 传递参数 使用 useNaviga…

python爬虫

{}字典[]列表 请求对象的定制 urllib.request.Request(url,headers) urllib.request.urlopen(请求对象) 因为urlopen方法中不能存储字典 所以headers不能传递进去 注意&#xff1a;因为参数顺序的问题&#xff0c;不能直接写url和headers&#xff0c;中间还有data&#xf…

gitlab下载及安装

目录 1、gitlab下载 2、gitlab安装 3、完全卸载GitLab 1、gitlab下载 首页&#xff1a;https://about.gitlab.com 安装&#xff1a;https://about.gitlab.com/install rpm包&#xff1a;https://packages.gitlab.com/gitlab/gitlab-ce 2、gitlab安装 2.1 CentOS 7 rpm -iv…

LeetCode | 520.检测大写字母

这道题直接分3种情况讨论&#xff1a;1、全部都为大写&#xff1b;2、全部都为小写&#xff1b;3、首字母大写其余小写。这里我借用了一个全是大写字母的串和一个全为小写字母的串进行比较 class Solution(object):def detectCapitalUse(self, word):""":type …

学习笔记——网络管理与运维——概述(网络管理方式)

三、网络管理方式 网络设备管理方式随着技术的发展而演进&#xff0c;以下是按技术发展先后顺序列举的主要网络设备管理方式&#xff1a; 1、控制台管理 最初的网络设备管理方式&#xff0c;通过网络设备的物理控制台端口进行管理&#xff0c;通常使用串行连接。 2、通过CLI…