ToC
hasInjectionContext()
hasInjectionContext()
方法主要用于判断当前是否具有注入上下文环境, currentInstance
和 currentRenderingInstance
都是指组件,currentApp
则表示的是应用根组件,如果没有获取到 currentInstance
则判断根应用实例是否初始化:
provide()
provide()
函数的实现比较简单,删除ts类型及原代码注释,再加上我自己的理解以后代码如下:
inject()
inject()
在实现上会比 provide()
稍加复杂一点,但也没有太复杂,多的那部分判断只是用来获取当前组件上下文的代码而已,同样的,删除ts类型及原注释,加上我自己的代码理解以后代码如下:
总结
这就是这两个API的全部实现,整体看下来还是很简单的,provide()
就是一直继承父级的 provides 作为自己的,利用原型链的特性一直向上查找,inject()
则是获取当前的组件实例,然后从实例上获取 provides,如果没有找到则在开发环境打印警告,hasInjectionContext()
方法则是判断当前组件/根应用是否已经挂载,都没有的话则表示应用没有初始化,不具备调用 provide()
和 inject()
的条件。
以上。