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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值