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 的值。

相关推荐

  1. SDWebImage分析

    2024-06-07 18:34:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-07 18:34:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-07 18:34:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-07 18:34:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-07 18:34:03       20 阅读

热门阅读

  1. 深入React Hoooks:从基础到自定义 Hooks

    2024-06-07 18:34:03       7 阅读
  2. vm-bhyve虚拟机安装ubuntu22版本后进入grub无法启动

    2024-06-07 18:34:03       9 阅读
  3. python姿态识别+Tensflow1.12+pyqt5+UI

    2024-06-07 18:34:03       8 阅读
  4. Chrome Plugin静态页面触发CSP如何解决CSP

    2024-06-07 18:34:03       10 阅读
  5. CSS样式优先级

    2024-06-07 18:34:03       9 阅读
  6. JVM由那些部分组成,运行流程是什么?

    2024-06-07 18:34:03       10 阅读
  7. 10分钟Apache Kylin快速入门

    2024-06-07 18:34:03       10 阅读
  8. AIGC笔记--Stable Diffusion源码剖析之UNetModel

    2024-06-07 18:34:03       8 阅读
  9. Docker面试整理-Docker的核心组件是什么?

    2024-06-07 18:34:03       13 阅读