vue3.0 + qiankun遇到的问题

进入子应用再回到主应用切换动态路由时

TypeError: Cannot read properties of undefined (reading 'appWrapperGetter')

application 'plat' died in status UNMOUNTING: instance.$destroy is not a function

第一个报错是因为子应用切走时没有销毁 vue的实例,在qiankun的 unmount 生命周期中,销毁 vue的实例即可!

这就引出了第二个报错,这个意思是实例中 没有 d e s t r o y 方法, destroy方法, destroy方法,destroy是vue2.0中销毁实例的方法,在vue3.0中,销毁实例用 unmount方法。代码是:

复制代码
/** 正确写法 */
let instance = null;
function render(props = {}) {
  const { container } = props;
  instance = createApp(App); // 这样才是创建了vue实例,此后才是往vue实例上挂载三方插件
  instance.use(router).use(store).mount(container ? container.querySelector("#app") : "#app");
}
export async function unmount(props) {
  instance.unmount(); // 销毁实例 vue3命名为unmounted vue2命名为destroyed
}

理论上上面的代码按说是可以的,但是如果我们qiankun的基座是vue2.0,在这里其实还是会报错,这里拿到的instance打印发现是这样的:

正确的写法是这样:

复制代码
let instance: any = null;
function render (props: any = {}) {
  const { container } = props;
  instance = createApp(App);
  instance.use(store)
    .use(router)
    .use(ElementPlus, { locale: zhCn })
    .mount(container ? container.querySelector('#app') : '#app');
  console.log(instance);
}
export async function bootstrap () {
  // console.log('[vue] vue app bootstraped');
}
export async function mount (props: any) {
  render(props);
}
export async function unmount () {
  if (instance) {
    instance.unmount();
    instance = null;
  }
}

打印是这个:

到这里问题就算解决了

相关推荐
谭光志8 小时前
Vibe Coding 时代,程序员该何去何从
前端·后端·ai编程
仿生狮子10 小时前
别再说“全栈”了,AI 时代团队只认这 5 种人
前端·人工智能·后端
kyriewen10 小时前
AI 写的 React 组件,合并前必查的 6 个坏味道——每个都有代码对比
前端·javascript·react.js
Highcharts.js10 小时前
软件开发公司为什么选择 Highcharts?
前端·前端框架·echarts·数据可视化·技术选型·highcharts·图表工具
多加点辣也没关系10 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜10 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
阿祖zu11 小时前
企业 AI 转型之痛,个人提效十倍不止,组织效率仍止步不前?
前端·aigc·agent
摇滚侠12 小时前
SpringBoot3+Vue3 全套视频教程 45-51
前端·javascript·vue.js
酸梅果茶12 小时前
【6】lightning_lm项目-LIO 前端 -点云预处理模块
前端·slam
触底反弹12 小时前
🔥 RAG 到底是怎么工作的?掰开揉碎了给你讲明白!
javascript·人工智能·后端