React useContext源码分析

React 框架中 useContext Hook 用于数据的传递,组件的数据传递有几种方式,通过 props、状态管理 和 useContext。本文将讲述useContext 在 React 是如何工作的,创建一个简单的 Context 例子并根据源码进行 Debug:

创建 context

创建 Context,并通过 Conext.Provider 进行注册:

export  const MyContext = createContext(null);

root.render(
  <MyContext.Provider value="100">
  <React.StrictMode>
    
    <App />
    
  </React.StrictMode>
  </MyContext.Provider>
);

使用Context

需要使用 context 的位置,调用 useContext

 const result = useContext(MyContext)

React 是怎么实现 Provider 和 Consumer呢?因为只有 Provider 的子组件可以获取 Context 的值,就需要借助 Fiber Stack结构,确保只有Provider 节点下的子节点才能够消费、看到 Provider 的值。

createContext

创建 Context 是,同时初始化 Provider,Provider 的 elementType 为 REACT_PROVIDER_TYPE。
在这里插入图片描述

将 Provider FiberNode 添加到 Stack 中
在这里插入图片描述
context currentValue 赋值
在这里插入图片描述
将当前Provider Node 插入到 FiberStack 中
在这里插入图片描述

useContext

useContext 用于获取 Context 的值,调用 readContext 并返回当前值
在这里插入图片描述

总结

useContext 的整体流程,Provider 赋值,useContext 取值,通过 Stack 进行管理,只有子节点才能看到 Provider 的值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

subline text3安装numpy,scipy,matplotlib,pandas,sklearn,ipynb

1&#xff0c;numpy&#xff08;基础数值算法&#xff09; 安装&#xff0c;要是在cmd直接安装到最后会报错, import numpy as np ModuleNotFoundError: No module named numpy 直接进入python环境&#xff0c;输入python -m pip install numpy就不会报错…

《科技与健康》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《科技与健康》期刊万方网可查吗 答&#xff1a;万方、维普可查 问&#xff1a;《科技与健康》是正规期刊吗&#xff1f; 答&#xff1a;万方维普收录的正规期刊。主管单位&#xff1a;长江出版传媒股份有限公司 主办单位&#xff1a;湖北科学技术…

调用阿里云智能云实现垃圾分类

目录 1. 作者介绍2. API3. 阿里云API垃圾分类业务4. 实验过程4.1 接入阿里云4.2 创建并获取AccessKey ID和Secret4.3 登录阿里云官网&#xff0c;搜索垃圾分类技术文档4.4 配置环境变量4.5 代码部分 1. 作者介绍 孙作正&#xff0c;男&#xff0c;西安工程大学电子信息学院&am…

【计算机毕设】基于SpringBoot的图书进销存管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本研究旨在设计并实现一款基于SpringBoot的图书进销存管理系统&#xff0c;旨在解决图书馆或书店在图书采购、销售和库存管理等方面的问题&#xff…

扩散模型的技术原理和应用价值

引言 一、扩散模型的基本概念 扩散模型(Diffusion Models)是一种基于概率论的生成模型&#xff0c;最初源自物理学中的扩散过程理论&#xff0c;比如墨水在水中的扩散过程。在机器学习领域&#xff0c;这一概念被创造性地应用于数据生成任务&#xff0c;特别是图像和声音的合成…

文件上传题目练习

[HNCTF 2022 Week1]easy_upload 先尝试上传一个php文件&#xff0c;发现直接就成功了 用蚁剑测试连接成功 找到flag [NISACTF 2022]bingdundun~ 白名单上传 这里因为尝试了很多绕过方式都不成功&#xff0c;去搜索了一下wp&#xff0c;发现要用到Phar://伪协议 补充&#xff…

Overleaf(Latex)论文里插入高清matlab图像,亲测有效!!

如何在论文里插入高清的实验结果是个令人头疼的问题&#xff0c;这里以overleaf对matlab结果为例进行了测试&#xff0c;亲测有效。 在matlab图像结果的左上角选择"文件"->“导出设置” 选择“渲染”&#xff0c;分辨率调至600&#xff1b; 字体和线条粗细视个人…

聊聊限流的一些事儿

一、背景 最近几年&#xff0c;随着微服务的流行&#xff0c;服务与服务之间依赖越来越强&#xff0c;调用也越来越复杂&#xff0c;服务间的稳定性变突显出来。特别是在遇到突发请求时&#xff0c;常常需要通过缓存、限流、熔断降级、负载均衡等多种方式保证服务的稳定性。其…

PhpSpreadsheet表格导出

个人笔记记录 使用PhpSpreadsheet 导出excel。 多重表头生成excel 表 //读取数据库public function demo1(){// 连接spc数据库$config Config::get(databaseedc);$db Db::connect($config);$data $db->name("xxxx")->alias(a)->field(main_header, sub_…

【LeetCode算法】第108题:将有序数组转换为二叉搜索树

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;由于数组nums是递增的&#xff0c;采用二分查找法来构造平衡二叉搜索树。首先&#xff0c;选择nums的中间结点作为根节点&#xff0c;然后将左部分的中间值作为左子树…

python下用cartopy绘制地形晕染(shading)图

python可以利用rasterio&#xff0c;cartopy&#xff0c;matplotlib等库绘制地形晕染图。 1.获取高程数据 高程数据可以从GEBCO网站下载&#xff1a;&#xff08;https://www.gebco.net/data_and_products/gridded_bathymetry_data/&#xff09;。 选择raster&#xff08;栅…

web-上传项目文件夹到Git远程仓库

Git初识 概念&#xff1a;一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 检验成功 打开bash终端&#xff08;git专用&#xff09;命令…

RSA密钥生成、加解密代码

背景介绍 RSA公钥加密算法是1977年由罗纳德李维斯特&#xff08;Ron Rivest&#xff09;、阿迪萨莫尔&#xff08;Adi Shamir&#xff09;和伦纳德阿德曼&#xff08;Leonard Adleman&#xff09;一起提出的。1987年首次公布&#xff0c;当时他们三人都在麻省理工学院工作。RSA…

【Linux】查看进程在哪个CPU上运行

当前服务器是多核&#xff0c;在进行性能压测时&#xff0c;需要除了要观测全局的CPU使用率&#xff0c;对于单进程单线程往往需要在一个cpu上运行&#xff0c;那如何查看进程在哪个CPU上运行呢&#xff1f; 方法一&#xff1a;taskset taskset命令主要是用来检索或设置一个处…

RTPS协议之Structure

目录 概览RTPS中的各实体和类RTPS实体和类的属性类型&#xff1a;RTPS Entities属性 HistoryCacheCacheChangeRTPS EntityRTPS ParticipantRTPS EndPointRTPS WriterRTPS Reader和DDS Entities的关联DDS DataWriterDDS DataReader 每个RTPS实体和DDS实体是一对一对应的。Histor…

Bidirectional Copy-Paste for Semi-Supervised Medical Image Segmentation

文章目录 1. 问题背景2. 本文方法2.1. 模型图2.2. 损失函数 2. 模型的训练流程图3. 实验 1. 问题背景 &#xff08;1&#xff09;在半监督医学图像分割任务中&#xff0c;标签数据和无标签数据之间存在经验失配问题。 &#xff08;2&#xff09;如果采用分隔的方式或者采用不一…

lua vm 二: 查看字节码、看懂字节码

本文讲一讲如何查看 lua 的字节码&#xff08;bytecode&#xff09;&#xff0c;以及如何看懂字节码。 以下分析基于 lua-5.4.6&#xff0c;下载地址&#xff1a;https://lua.org/ftp/ 。 1. 查看字节码 1.1 方法一&#xff1a;使用 luac luac 是 lua 自带的编译程序&#x…

Django的PATH路径转换器

本书1-7章样章及配套资源下载链接: https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwdnanc 源码、PPT课件、教学视频等&#xff0c;可以从前言给出的下载信息下载&#xff0c;大家可以评估一下。 在Django框架中&#xff0c;默认内置了一组PATH路径转换器&#xff0c;具…

Chromebook也可以安装Visual Studio Code

文章目录 ​一、Chromebook也可以安装Visual Studio Code二、chromebook硬件条件三、在chromebook上启用Linux四、安装VS Code推荐阅读 ​一、Chromebook也可以安装Visual Studio Code 在过去几年里&#xff0c;运行谷歌Chrome操作系统的Chromebook一直在作为传统笔记本电脑的…

css 图片上添加模糊背景的文字内容

html部分 <div class"onlogo"> <img src"../assets/img/banner.png" /><div class"imgText"><div class"title">一体化电子印章应用服务</div><div class"content">为企业提供安全可靠…