vue2升级vue3:this.$createElement is not a function—动态组件升级
this.$createElement
vue2 动态组件加载,this.$createElement非常好使!比如:
import { Component as tsc } from 'vue-tsx-support';
import { Component,Prop } from 'vue-property-decorator';
const chartPanel = ()=>import('line-chart')
@Component
export default class Demo extends tsc<{}> {
@Prop({ required: true, type: Object }) readonly panel;
chartData
render(){
return this.$createElement(chartPanel, {
props: {
panelModel: this.panel,
chartData: Object.freeze(this.chartData),
},
});
}
}
了解vue.$createElement
// @returns {VNode}
createElement(
// {String | Object | Function}
// 一个 HTML 标签名、组件选项对象,或者
// resolve 了上述任何一种的一个 async 函数。必填项。
'div',
// {Object}
// 一个与模板中属性对应的数据对象。可选。
{
// (详情见下一节)
},
// {String | Array}
// 子级虚拟节点 (VNodes),由 `createElement()` 构建而成,
// 也可以使用字符串来生成“文本虚拟节点”。可选。
[
'先写一些文字',
createElement('h1', '一则头条'),
createElement(MyComponent, {
props: {
someProp: 'foobar'
}
})
]
)
更多推荐阅读:vue.$createElement的使用实例 https://juejin.cn/post/6969505687114088484
那么vue3 怎么弄呢?
看下官方文档:https://vuejs.org/guide/extras/render-function.html#basic-usage
import { defineComponent, h } from 'vue';
import Panel from '@/plugins/charts/pie-charts/components/chart-panel';
export default defineComponent({
name: 'ChartWrap',
setup() {
const vnode = h(Panel, { m: 222 });
return () => (
<div>
<div>title</div>
{vnode}
</div>
);
},
});
但是,如果是异步组件
const asyncPage = () => import('./Lazy.vue')
this.$createElement还是没有问题的,但是vue3,这个没有法子,但是vue3 有defineAsyncComponent 方案,具体查看下一章:vue2升级vue3:异步组件defineAsyncComponent》
异步组件导出:
import pieChartJson from './pie-charts/plugin.json';
import pieChartLogo from './pie-charts/img/logo.svg';
import pieChart from './pie-charts/index';
export const ChartSourceBuildIn = {
[pieChartJson.type]: pieChart,
};
export const ChartSourceImgBuildIn = {
[pieChartJson.type]: pieChartLogo,
};
加载异步组件:
import { defineComponent, h } from 'vue';
import { ChartSourceBuildIn } from '@/plugins/charts/index';
export default defineComponent({
name: 'ChartWrap',
setup() {
const chart = ChartSourceBuildIn['pie-charts'];
const { ChartPanel } = chart;
const vnode = h(ChartPanel, { m: 222 });
return {
vnode,
};
},
render() {
return (
<div>
<div>title</div>
{this.vnode}
</div>
);
},
});
这个和vue2的方案基本保持一致
转载本站文章《vue2升级vue3:this.$createElement is not a function—动态组件升级》,
请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/vue3/8850.html
vue2升级vue3:this.$createElement is not a function—动态组件升级的更多相关文章
- uniapp项目vue2升级vue3简单记录
看到好多开源项目都升级了vue3,看文章说vue3性能升级很多,而且组合式api很香,遂把最近开发的自助洗车app升级下,在此记录下出现的问题. uniapp升级vue3官方指南 我是先去vue官网看 ...
- vue2升级vue3:vue2 vue-i18n 升级到vue3搭配VueI18n v9
项目从vue2 升级vue3,VueI18n需要做适当的调整.主要是Vue I18n v8.x 到Vue I18n v9 or later 的变化,其中初始化: 具体可以参看:https://vue- ...
- vue2升级vue3指南(二)—— 语法warning&error篇
本文总结了vue2升级vue3可能会遇到的语法警告和错误,如果想知道怎样升级,可以查看我的上一篇文章:vue2升级vue3指南(一)-- 环境准备和构建篇 Warning 1.deep /deep/和 ...
- vue2升级vue3:Vue Demij打通vue2与vue3壁垒,构建通用组件
如果你的vue2代码之前是使用vue-class-component 类组件模式写的.选择可以使用 https://github.com/facing-dev/vue-facing-decorator ...
- vue2升级vue3:vue-i18n国际化异步按需加载
vue2异步加载之前说过,vue3还是之前的方法,只是把 i18n.setLocaleMessage改为i18n.global.setLocaleMessage 但是本文还是详细说一遍: 为什么需要异 ...
- Vue2 到 Vue3,重温这 5 个常用的 API
距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等.虽然目前大多数开发者们在使用的仍旧以Vue2为准,但Vue3显然是Vue开发者们未来必须面对的,而且前不久V ...
- Vue2和Vue3技术整理1 - 入门篇 - 更新完毕
Vue2 0.前言 首先说明:要直接上手简单得很,看官网熟悉大概有哪些东西.怎么用的,然后简单练一下就可以做出程序来了,最多两天,无论Vue2还是Vue3,就都完全可以了,Vue3就是比Vue2多了一 ...
- Vue2和Vue3技术整理3 - 高级篇
3.高级篇 前言 基础篇链接:https://www.cnblogs.com/xiegongzi/p/15782921.html 组件化开发篇链接:https://www.cnblogs.com/xi ...
- vue2和vue3生命周期的区别
概念 首先,我们了解一下"生命周期"这个词.通俗的来说,生命周期就是一个事务从出生到消失的过程.例如,一个人从出生到去世.在vue中,vue的生命周期是指,从创建vue对象到销毁v ...
- 盘点Vue2和Vue3的10种组件通信方式(值得收藏)
Vue中组件通信方式有很多,其中Vue2和Vue3实现起来也会有很多差异:本文将通过选项式API 组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式.其中将要实现的通信 ...
随机推荐
- umich cv-6-1 循环神经网络基本知识
这节课中介绍了循环神经网络的第一部分,主要介绍了循环神经网络的基本概念,vanilla循环网络架构,RNN的一些应用,vanilla架构的问题,更先进的rnn架构比如GRU和LSTM 循环神经网络基本 ...
- 【本博客所有关于git文章迭代汇总】git操作(暂存,回退,绑定远程等),看这一篇就够了
1.git常用操作 git 小白操作,无非是clone,然后拉取,提交分支,第一次clone的时候,关联远程分支可能会遇到问题,可以看第四条git关联远程分支 # 在当前目录新建一个Git代码库 $ ...
- YCSB对MongoDB数据库性能测试
一.安装部署 1.1前置条件 Install Java and Maven Go to http://www.oracle.com/technetwork/java/javase/downloads/ ...
- 一篇文章玩透awk
安装新版本gawk awk有很多种版本,例如nawk.gawk.gawk是GNU awk,它的功能很丰富. 本教程采用的是gawk 4.2.0版本,4.2.0版本的gawk是一个比较大的改版,新支持的 ...
- SVN分支与合并透析
做法: 1.拉分支开发代码 2.开发完成后要和到主干去发布,这时候先把主干合并到分支,解决冲突 3.运行分支系统,看是否正确 4.再把该分支合并到主干 要知道分支分出去时的版本号,cmd打开命令行,使 ...
- C语言从键盘上输入一个梯形的上底a、下底b和高h,输出梯形的面积。
#include<stdio.h> int main() { double a, b, h, s;//定义变量,上底,下底,高,面积 scanf_s("%lf,%lf,%lf&q ...
- Opencv实例练习
实例所用的函数可在另一篇文章查询: https://www.cnblogs.com/Zhouce/p/17867164.html 1.图像读取 1 import cv2 # 引入opencv库 2 ...
- AtCoder_abc331
AtCoder_abc331 (这次题真的真的真的好难) 比赛链接 A - Tomorrow 题目链接 题目大意 有一个\(M\)个月,\(D\)天的日历,请输出\(y年m月z日\)的下一天. 解题思 ...
- echarts设置多条折线不是你想的那样简单
简单的多条折线图 小伙伴写过多条折线图的都知道, 常见的折线图是 xAxis 配置项下的 data属性上设置时间或者日期. series配置项下是对应的 legend中的数据以及该条折线的数据. &l ...
- 解决OpenCV3+VS2015(VS2017)运行时出现debug error abort()has been called的问题
问题描述: 在windows平台上安装opencv后,测试一张图片时,出现了debug error abort()has been called的问题 环境: vs2015 windows 10 op ...