我在一些旧的(?)文档和代码中看到了getCurrentInstance()
函数的引用,但在当前的Vue 3文档中找不到它。
getCurrentInstance()
已弃用?
如果是,原因是什么?(inject()
够吗?)如果没有,为什么我在文档中找不到?
getCurrentInstance()
从Vue 3文档中删除,因为它是一个内部API:
因为实例是公开非公共api的内部实例。从该实例中使用的任何内容在技术上都可以在任何发布类型之间中断,因为它们不受semver约束。
getCurrentInstance()
最初是在2020年10月4日记录的,但后来在2021年8月31日由Vue的创建者(Evan You)对Composition API文档进行了重大重构。尽管从文档中删除,getCurrentInstance()
仍然:
-
在Vue core中被广泛使用。
-
在代码中没有作为弃用的文档。
-
作为高级API的一部分导出。
考虑到它是一个未公开的内部API,请谨慎使用。
https://github.com/vuejs/vue/issues/12596#issuecomment-1173269807
引用evan的评论,
getCurrentInstance主要用于需要额外内部访问的官方vue库,而不是用于用户应用程序代码。它被错误地记录在WIP v3文档中,但不再被认为是公共API
VueUse
库广泛使用getComponentState()
来检测代码是否在组件生命周期内被调用。
例如:
https://github.com/vueuse/vueuse/blob/main/packages/shared/tryOnBeforeUnmount/index.ts
我要大胆地说,
"如果它对VueUse maestro
antfu
来说足够好,那么它对我来说也足够好。">
所以尽管官方的deprecated
,它仍然是必不可少的直到Vue提供了一个方法,如isInComponentLifecycle()
。
我的建议是只将它用于这种类型的检测,并且尽可能避免访问它的成员。