使用Element UI自定义内容弹框,h()函数报错的解决方案
2023-12-13
1分钟阅读时长
问题表现
最近开发中遇到了一个问题,在使用 element ui 中使用 MessageBox
来渲染自定义VNode对话框的时候,出现了下列错误:
globally imported h() can only be invoked when there is an active component instance, e.g. synchronously in a component's render or setup function.
上述错误大概的意思是:h()函数只能用在一个组件实例里,比如组件的render函数或者是setup函数里。
显然,我的代码完全没有涉及到上述提到的内容,如果是框架的问题,这就让问题看起来好像没有那么简单了。
先说结论
如果你是在使用elementui中如:this.$msgbox()
的方式,来渲染自定义内容的弹窗时,首先,确保你正确定义/导入了h函数,比如:
const h = this.$createElement;
而非:
import { h } from 'vue';
问题分析
首先我写这些代码的时候是按照文档里的demo复制过来的。
根据之前使用的印象,我直接复制了关键代码:
this.$msgbox({
title: '消息',
message: h('p', null, [
h('span', null, '内容可以是 '),
h('i', { style: 'color: teal' }, 'VNode')
]),
})
缺少h函数,记得vue里有个h函数,我就导入
import { h } from 'vue';
保存运行,直接报错
总结
- 仔细看文档、仔细看文档、仔细看文档
- 复制demo需要仔细阅读上下文