17 初探Context的使用场景

context

  • 容器(即上下文) → 装数据 → 可以传递到程序的多个地方
  • 程序在执行时可访问的容器

import styles from ...则css要写module.css,否则无效果;
import from ...则css无须写module. ,否则无效果

使用

  • context.js
export const ThemeContext = React.createContext('red') // 这个是默认值
  • main.jsx
import BottomNav from './BottomNav/index'
import Header from './Header/index'
import BtnGroup from './BtnGroup/index'
import { ThemeContext } from './context'
class Main extends React.Component {state = {navData: ['第①','第②','第③','第④',],theme: 'black'}changeTheme = (theme) => {this.setState({theme})}render() {return (<ThemeContext.Provider value={this.state.theme}><div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}><Header>标题</Header><BtnGroup changeTheme={this.changeTheme} /><BottomNavdata={this.state.navData}></BottomNav></div></ThemeContext.Provider>)}
}
export default Main
  • Header组件
import './index.css'
import { ThemeContext } from '../context'class Header extends React.Component {render() {return (<ThemeContext.Consumer>{(theme) => {console.log('theme', theme);return (< header className={'title ' + `header-${theme}`} >{this.props.children}</header>)}}</ThemeContext.Consumer >)}
}
export default Header
  • BtnGroup组件
// 注意方法的绑定
import './index.css'
class BottomNav extends React.Component {render() {return (< div style={{ display: 'flex', justifyContent: 'space-around', flex: 1, paddingTop: '44px' }}><button onClick={() => this.props.changeTheme('black')}>Black</button><button onClick={() => this.props.changeTheme('orange')}>Orange</button><button onClick={() => this.props.changeTheme('purple')}>Purple</button><button onClick={() => this.props.changeTheme('red')}>Red</button></div>)}
}
export default BottomNav

总结

① 提供: export const ThemeContext = React.createContext(‘red’)
② Provide组件包裹组件树、传递value:<ThemeContext.Provider value={this.state.theme}></<ThemeContext.Provider>
③ Consumer使用theme(jsx + 回调函数参数为theme)

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

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

相关文章

分布式监控系统开发【day37】:需求讨论(一)

本节内容 为什么要做监控&#xff1f; 常用监控系统设计讨论监控需求讨论如何实现监控服务器的水平扩展&#xff1f;监控系统架构设计一、为什么要做监控&#xff1f; 熟悉IT监控系统的设计原理开发一个简版的类Zabbix监控系统掌握自动化开发项目的程序设计思路及架构解藕原则…

iOS:练习题中如何用技术去实现一个连线题

一、介绍 本人做的app涉及的是教育行业&#xff0c;所以关于练习题的开发肯定是家常便饭。例如&#xff0c;选择题、填空题、连线题、判断题等&#xff0c;每一种题型都需要技术去实现&#xff0c;没啥多大难度&#xff0c;这里呢&#xff0c;就给出实现连线题的核心代码吧。过…

18 Context与组合的应用场景与使用问题

contextType 指定context类型为创建的上下文&#xff0c;此时不需要用Consumer组件包裹&#xff0c;使用this.context即可访问会向上找最近的上下文并取值最适合的场景&#xff1a;杂乱无章的组件都需要同一些数据&#xff1b;若单纯为了不层层传递属性&#xff0c;使用contex…

http --- 共享加密(对称加密)的几个概念

使用互联网进行数据传输时,可能会产生以下四个问题: 1. 窃听: A向B发送的消息,有可能在传输过程中被X窃听到 2. 假冒: A收到来自B的消息有可能是X冒充的 3. 篡改: A确实收到来自B的消息,但是该消息有可能被X篡改了 4. 事后否认:B确实收到了来自A的消息,但是A是恶意用户,当A像B…

213. House Robber II 首尾相同的偷窃问题

&#xff3b;抄题&#xff3d;&#xff1a; You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed. All houses at this place are arranged in a circle. That means the first house is the neighbor of…

原型链

<!DOCTYPE html><html><head lang"en"> <meta charset"UTF-8"> <title></title></head><body><script> /* 原型中的默认属性 原型链&#xff1a;当调用构造函数&#xff08;Fn()&a…

http --- 公开密钥加密(非对称加密)的几个概念

公开密钥加密: 公钥加密,私钥解密 公开密钥加密的处理流程: 1. A准备通过互联网向B发送数据 2. B生成公钥P和私钥S 3. B将P发送给A 4. A使用P进行加密,并将密文通过互联网发送给B 5. B使用S进行解密得到数据公钥加密的更具体的栗子: 1.B首先准备好公钥P和私钥S 2.B将公钥发布…

19、20 Context API

安装React Dev Tool Context对象.displayName 使用别名 不使用别名 React.createContext 创建指定的Context对象组件会找离自己最近的Provider&#xff0c;获取其value变量名都叫value的情况&#xff0c;就近取AContext变量名有所区分&#xff0c;两个value都可以获取可以…

01-spring配置详解

1 bean元素 <!--将User对象交给spring容器进行管理 --><!-- Bean元素:使用该元素描述需要spring容器管理的对象class属性:被管理对象的完整类名.name属性:给被管理的对象起个名字.获得对象时根据该名称获得对象. 可以重复.可以使用特殊字符.id属性: 与name属性一模一…

第八模块:算法设计模式、企业应用 第2章 企业应用工具学习

第八模块&#xff1a;算法&设计模式、企业应用 第2章 企业应用工具学习转载于:https://www.cnblogs.com/tqtl911/p/9131614.html

http --- 混合加密的具体过程

混合加密: 共享加密存在一个“共享密钥”无法安全告知服务端的问题.公开加密存在,加密、解密速度慢的问题.混合加密则同时使用了2种加密技术,具体过程如下: 1. B提前生成公钥P和私钥S,并将P发布到网上 2. A想(通过互联网)像B发送数据 3. A从互联网上获取B的公钥P,并使用P对共享…

Vite+Vue3页面空白、图标不显示问题解决

页面空白问题 由于项目部署在子文件夹下&#xff0c;因此需要配置vite.config.js const config {base: ./, }el-icon图标不显示、打包时mkdir无权限 在控制台Network看字体图标的请求&#xff0c;发现地址多了_assets&#xff0c;本以为需要重新配置publicDir&#xff0c;后…

在HTML打开已安装的App,未安装跳转到对应的下载链接

借鉴 HTML中判断手机是否安装某APP&#xff0c;跳转或下载该应用 function lookApp () {var ua navigator.userAgentvar isAndroid /(Android);?[\s/]([\d.])?/.test(ua)var isIpad /(iPad).*OS\s([\d_])/.test(ua)var isIpod /(iPod)(.*OS\s([\d_]))?/.test(ua)var is…

javascript --- 自定义数组的反序函数

想写一个自定义的_reverse函数,其作用是将传入的数组进行部分反序. 效果如下: 输入[1,2,3,4,5,6,7,8,9] 第一个将2~4个位置的数字反序 第二个将2~6个位置的数字反序. // js function _reverse(arr, s, e) {arr arr.join().slice(0,s) arr.join().slice(s,e).split().revers…

21 Fragment和短语法应用

React.Fragment jsx语法&#xff0c;相当于document.createDocumentFragment()创建文档碎片容器&#xff0c;优化渲染解决了没有根节点的问题<></>这种短语法也会声明React.Fragment但短语法不支持keyReact.Fragment只支持key属性&#xff0c;其余属性如事件等不支…

201521123004《软件工程》个人阅读作业1

task1Task2: 201521123004 林艺如 博客&#xff1a;https://www.cnblogs.com/dabaolyr/ 码云&#xff1a;https://gitee.com/dabao_lyr Task3&#xff1a;完成博客-阅读与思考 阅读参考材料&#xff0c;并回答下面几个问题&#xff1a; &#xff08;1&#xff09;回想一下你初入…

在sql当中为了让数据做缓存做with as的操作

今天看别人的代码&#xff0c;突然发现之前理解的sql的with as的用法有新的理解。 之前理解的with as只是想着做单表的union all 操作时才使用&#xff0c;今天发现在可以使用逗号做分割&#xff0c;做缓存不同的表数据。 下面的例子如下&#xff1a; WITH t1 AS (SELECT file_…

javascript --- 从数组中,找出比给定元素大一丁点的元素

目标如下: 从数组[1,3,2,4,5,6,7]中找到比第1个位置大一丁点的元素 function _findIndex(arr, j){let k -1;let key arr[j];for(let i j; i< arr.length; i) {if(arr[i] > key) {if( k ! -1){if(arr[i] < arr[k]) {k i;}} else {k i;}}}return k } let arr [1,…

22 React高阶组件

搭建服务端 yarn add express yarn add nodemon 在server目录下 npm init -y // 增加dev脚本"scripts": {"dev": "nodemon ./index.js"},引入 git HOC High Order Component 高阶组件&#xff0c;是组件的抽象HOC不是React提供的API&#xf…

PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA

1140 Look-and-say Sequence&#xff08;20 分&#xff09; 题意&#xff1a;观察序列D, D1, D111, D113, D11231, D112213111, ...&#xff0c;显然后一个串是对前一个串每一小段连续相同的字母及其个数的描述。例如&#xff0c;D112213111是对D11231的描述&#xff0c;原因是…