Vue3中如何检查一个对象是否是Vue组件?

ess*_*pye 5 instanceof vue.js vuejs3

我可以vue 2简单地只是

import Vue from "vue"
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作

if (!(myComponent instanceof Vue)) return
Run Code Online (Sandbox Code Playgroud)

有办法做到吗Vue3

vov*_*sko 5

这不是一个非常优雅的解决方案,但您可以检查它是否有功能render

if (!(myComponent && typeof myComponent.render  === 'function')) return
Run Code Online (Sandbox Code Playgroud)

  • 请注意,虽然这是检查传统组件的可靠方法,但 Vue3 在某种程度上简化了[功能组件](https://vuejs.org/guide/extras/render-function.html#function-components)的声明它们现在基本上只不过是一个简单的函数。上述检查无法检测到此类组件。不幸的是,除了尝试将它们用作组件(或使用模拟参数调用它们为:“(props,{slots,emit,attrs})”并查看它们是否返回有效的模板字符串)。 (2认同)