import { h } from 'vue'
function isVueComponent(comp) {
const vnode = h(comp)
if (!vnode.type) {
return false
}
// Check if it's just an HTML Element
if (typeof vnode.type === 'string') {
return false
}
// A component that has render or setup property
if (vnode.type.setup || vnode.type.render) {
return true
}
// Check if functional component
// https://vuejs.org/guide/extras/render-function.html#functional-components
if (vnode.type.emits || vnode.type.props) {
return true
}
}
2条答案
按热度按时间fcipmucu1#
这不是一个很好的解决方案,但是您可以检查它是否具有
render
函数。bzzcjhmw2#
您可以使用Vue中的
h()
(hypercript)函数并检查其type属性:最后一个条件比较棘手,因为没有
props
和emits
属性的函数被视为函数组件。