当前位置: 首页 > news >正文

【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 组件之下。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • web前端换行命令:深入解析与实用技巧
  • 国密SM2JS加密后端解密
  • 【机器学习】机器学习与物流科技在智能配送中的融合应用与性能优化新探索
  • 【数据结构】双链表
  • 大规模装箱问题:蜣螂优化算法DBO求解二维装箱问题(MATLAB代码)
  • bash和sh区别
  • 牛客网刷题 | BC118 N个数之和
  • vue学习(一)
  • 代理模式(设计模式)
  • 【机器学习】集成学习方法:Bagging与Boosting的应用与优势
  • 安全测试框架
  • 怎么修改Visual Studio Code中现在github账号
  • HCIA 16 构建 IPv6 网络基础配置
  • Llama模型家族之拒绝抽样(Rejection Sampling)(九) 强化学习之Rejection Sampling
  • YOLOv8可视化界面PYQT5
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • const let
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • gulp 教程
  • Java到底能干嘛?
  • js递归,无限分级树形折叠菜单
  • learning koa2.x
  • mockjs让前端开发独立于后端
  • Mysql优化
  • Node项目之评分系统(二)- 数据库设计
  • SpriteKit 技巧之添加背景图片
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 给新手的新浪微博 SDK 集成教程【一】
  • 目录与文件属性:编写ls
  • 你真的知道 == 和 equals 的区别吗?
  • 试着探索高并发下的系统架构面貌
  • 算法-插入排序
  • 异步
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #define,static,const,三种常量的区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (BFS)hdoj2377-Bus Pass
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (万字长文)Spring的核心知识尽揽其中
  • (一)基于IDEA的JAVA基础12
  • (转)Unity3DUnity3D在android下调试
  • (转载)Linux 多线程条件变量同步
  • *Django中的Ajax 纯js的书写样式1
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .gitignore文件---让git自动忽略指定文件
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net 连接达梦数据库开发环境部署
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET下的多线程编程—1-线程机制概述
  • ?.的用法