React createContext优化方案contextType

news/2025/1/13 9:32:37/

我们先来看个这样的组件

import React,{createContext} from "react"const ThemeContext = createContext();export default class Demo14 extends React.Component {constructor(props){super(props);this.state = {theme:"red"}}render(){const { theme } = this.state;return (<div><ThemeContext.Provider value = { theme }><Middle></Middle></ThemeContext.Provider></div>)}
}class Middle extends React.Component{render(){return (<div><Bottom></Bottom></div>)}
}class Bottom extends React.Component{render(){return (<div><ThemeContext.Consumer>{theme  => <h1>{ theme }</h1>}</ThemeContext.Consumer></div>)}
}

我这里为了方便 直接三个组件写同一个文件里了
首先 跟组件 调用了 Middle 组件 定义 ThemeContext 接收 createContext
然后通过ThemeContext.Provider传递值 value是字符串类型的red

然后 Middle 组件中调用了Bottom
Bottom中获取了theme的值 并输出

但有个优化方案 老实说 我并不见得这个代码很丑
但是官方其实又给我们提供了一个contextType
将 Bottom 代码改成这样

class Bottom extends React.Component{static contextType = ThemeContext;render(){const theme = this.contextreturn (<div><h1>{ theme }</h1></div>)}
}

在这里插入图片描述
就是在这里 中间转换一下 不用再多套一层 而且用一个箭头函数 也会有点奇怪 这样看着会清晰一些


http://www.ppmy.cn/news/668140.html

相关文章

DAY38——动态规划

步骤&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目一. 斐波那契数列 1. 确定dp数组以及下标的含义 dp[i]的定义为&#xff1a;第i个数的斐波那契数值是dp[i] 2. 确定递推公式 状态…

Ubuntu18双系统安装+遇到的问题+后续软件安装

1 ubuntu安装 这里安装的是ubuntu18.04。全过程是找淘宝完成的&#xff0c;电脑是笔记本拯救者P7000 2020年&#xff08;RTX2060500g固态&#xff09;&#xff0c;这里简单记录一下过程。 下述过程和这篇文章很像&#xff0c;具体过程可以参考 https://blog.csdn.net/weixin_4…

AK大神AE教程文字整编

简易天空替换 技能&#xff1a;线性擦除&#xff0c;追踪运动&#xff0c;用颜色键K出人物&#xff0c;用色彩曲线调色。 &#xff08;1&#xff09;天空图片素材放在视频素材上方&#xff0c;图片素材添加效果-过渡-线性擦除&#xff0c;擦除角度0度&#xff0c;完成过渡30%&a…

针对lenovo R7000平台的Ubuntu 18.04双硬盘双系统搭建

双固态双系统安装 分区及启动挂载点 双固态需要把EFI启动项放在同一个硬盘中即在ubuntu分区时应将efi分区建立在和win10同一硬盘中&#xff0c;选择启动挂载点时选择该efi分区或者直接不建立efi分区&#xff0c;直接挂载在win10启动项中&#xff0c;这里直接选择在win10 efi位…

linux:framebuffer驱动之ssd1363驱动和fbtft驱动修改

环境&#xff1a;ubuntu18.04虚拟机和imx6q开发平台 目录 前言1.添加ssd1363驱动到fbtft2.亮度调节 前言 手里有一块ssd1363芯片的屏幕&#xff0c;查了很多关于framebuffer驱动的资料&#xff0c;在linux里面有个fbtft驱动部分专门针对这种tftf屏幕做的驱动&#xff0c;于是照…

promise的创建

同过future和promise来实现线程间的通信&#xff0c;不需要使用互斥量和条件变量等。 promise&#xff08;承诺&#xff09;<------> future&#xff08;未来&#xff09; 有承诺才有未来&#xff0c;承诺做为一个参数&#xff0c;承诺的东西做完之后&#xff0c;才会有未…

双ssd双系统(win10+ubuntu20.04)之ubuntu20.04空间分配和安装教程

我的笔记本型号是联想拯救者R9000P&#xff0c;然后自己又加装了一个1T的固态硬盘&#xff08;下图磁盘1&#xff09;。电脑硬盘空间分配如下图所示&#xff0c;其中红色数字1、2、3是ubuntu系统占用的。我安装的是ubuntu20.04.2.0&#xff0c;可以从官网上下&#xff0c;但是会…

thinkpad X1 2016 NMV固态硬盘 win7+win10双系统 GPT+UEFI启动 系统安装记录

作为一个工程师&#xff0c;搞到一个thinkpad Yoga X1 2016&#xff0c;很久没有折腾了&#xff0c;也不想折腾&#xff0c;结果疫情期间维修人员不方便&#xff0c;自己搞&#xff0c;非常折腾 以下所有英文单词可能有误 安装msdn的 win10纯净系统 UEFIgpt设置 进入U盘PE系…