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

news/2024/6/18 21:24:25 标签: react.js, javascript, 前端

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'; // 假设你已经创建了ThemeContext

class 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.niftyadmin.cn/n/5520394.html

相关文章

Python学习打卡:day06

day6 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day648、函数综合案例49、数据容器入门50、列表的定义语法51、列表的下标索引1、列表的下标&#xff08;索引&#xff09;2、列表的下标&#xff08…

前端 JS 经典:package.json 属性详解

前言&#xff1a;package.json 里的字段大致分两部分&#xff0c;一部分标准字段&#xff0c;一部分非标字段。标准字段就是官方定义好的字段&#xff0c;非标字段包括作者自定义字段 1. 标准字段 1.1 name 包名&#xff0c;就是我们用 npm 去下载的名字&#xff0c;就定义在…

selenium使用已经打开的浏览器

Selenium 本身不支持直接连接到一个已经打开的浏览器页面。Selenium 启动的浏览器实例是一个全新的会话&#xff0c;它与手动打开的浏览器页面是分开的。但是&#xff0c;有一些变通的方法可以实现类似的效果。 一种方法是通过附加代理连接到已经打开的浏览器。下面是如何实现…

数智教育创新如何向未来?腾讯云与你探索革新之路

引言 随着科技革命的快速发展&#xff0c;掀起教育领域的变革&#xff0c;新理念、新技术、新模式、新应用正不断涌现&#xff0c;正塑造着教育的未来形态。未来科技还将如何赋能教育创新&#xff1f; 5月31日&#xff0c;由腾讯云TVP 与西安电子科技大学联合举办的「数智教育的…

Kotlin 语言基础学习

什么是Kotlin ? Kotiln翻译为中文是:靠他灵。它是由JetBrains 这家公司开发的,JetBrains 是一家编译器软件起家的,例如常用的WebStorm、IntelliJ IDEA等软件。 Kotlin官网 JetBrains 官网 Kotlin 语言目前的现状: 目前Android 已将Kotlin 作为官方开发语言。 Spring 框…

使用thymeleaf直接渲染字符串

目录 一、依赖 二、示例代码 一、依赖 <--JAVA 8--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>2.7.18</version></dependency><-…

grub引导LinuxMint

注意事项&#xff1a;文件系统必须是FAT32 安装 sudo apt install gparted -y 分区管理软件 使用gparted分区和查看设备路径 sudo apt-get install grub-efi-amd64 #/dev/sdd1 是需要制作分区引导的设备路径 sudo mount /dev/sdd1 /mnt/123 #bios sudo grub-install --targe…

TLE9879的基于Arduino调试板SWD刷写接口

官方的Arduino评估板&#xff0c;如下图所示&#xff1a; 如果你有官方的调试器&#xff0c;应该不用关注本文章&#xff0c;如下图连接就是&#xff1a; 如果&#xff0c;您和博主一样需要自己飞线的话&#xff0c;如下图所示&#xff1a;PCB的名称在右边整理&#xff0c;SWD的…