Vue2升级Vue3 --- 第三方库变化(基于gogocode)

本次升级基于gogocode快捷转换gogocode升级体验,汇总的部分问题可能与gogocode有关,但仍可作为vue2升级vue3过程中报错问题的解决参考

第三方库变化

1.vue-contextmenujs(右键菜单)

javascript 复制代码
// 原第三方库不支持vue3,更换为支持vue3的库"@imengyu/vue3-context-menu": "^1.0.8"
// 更换库后组件样式与以前不一致,如果要求还原样式的话需要进行自定义修改
// 项目内右键菜单原绑定在ant-design-vue的tabs组件上,如果不更改绑定位置会导致事件无法触发

import Contextmenu from 'vue-contextmenujs/dist/contextmenu.umd.js'
=> import Contextmenu from '@imengyu/vue3-context-menu'

import '@imengyu/vue3-context-menu/lib/vue3-context-menu.css' // 额外引入样式文件

2.@vue/composition-api(Vue2中使用Vue3语法)

  • 原因:Vue3中已经支持,不需要引入,引入会报错 [vue-composition-api] No vue dependency found
  • 解决:修改引入@vue/composition-apivue

3.vxe-table(表格组件)

  • 原因:当前版本不支持vue3
  • 解决:升级版本为4.3.5

4.vuedraggable(拖拽组件)

  • 原因:当前版本不支持vue3
  • 主要变化:不支持多个根节点
  • 版本:^4.1.0
  • 提示:由于元素结构发生变化,样式要还原也需要调整。以下为适配新版本拖拽组件的修改模板,可按照步骤一一替换,若需更详细的指引请自行找官方文档
javascript 复制代码
/*
1.gogocode-cli修改v-model为v-model:value,此时需要手动还原
2.item-key可用于绑定list中单个元素element中的某个属性字段,用于替换原来v-for中的key值
3.tag="transition-group"用于替换原来的transition-group
4.:component-data="{tag: 'span'}"绑定原来的transition-group的属性字段
5.使用template取代原来的v-for渲染的方式,element与index为指定插槽属性,用于获取list中单个元素以及元素对应索引,index可用于原来的key值绑定
6.内部遍历的元素逐个替换成element
*/
<draggable
  v-model="list"
  item-key="id"
  tag="transition-group"
  :component-data="{tag: 'span'}"
>
  <template #item="{element, index}">
    <div :key="index">{{ element.text }}</div>
  </template>
</draggable>

5.monaco变化

  • 原因:编辑器实例为Vue3响应式数据时,更新编辑器内容会导致UI界面更新,堆栈溢出
  • 解决方案1:将编辑器实例由Vue3响应式数据转变为普通变量,但原通过vue实例访问编辑器实例会无法获取(若无需通过vue实例获取编辑器实例则可直接使用该方案)
  • 解决方案2:getValue、setValue等各种调用编辑器实例API时先通过toRaw获取原始数据,避免响应性更新(该方案比较繁杂,目前暂不确定哪些API有此硬性需求,建议API调用时都先获取原始数据)

6.vue-router变化

  • 问题:定义路由存在相同名称name在4.0版本中会忽略前面同名的路由
  • 解决:同名路由给name字段赋不同的值

7.vue-loader变化

  • 问题:vue-loader版本必须为16.x 版本或更高版本
  • 解决:增加"vue-loader": "^16.0.0"并安装,然后调整vue-loader调用方法:const VueLoaderPlugin = require('vue-loader/lib/plugin') => const { VueLoaderPlugin } = require('vue-loader')
相关推荐
盛夏绽放17 分钟前
Excel导出实战:从入门到精通 - 构建专业级数据报表的完整指南
开发语言·javascript·excel·有问必答
Mintopia19 分钟前
🌀曲面细分求交:在无限细节中捕捉交点的浪漫
前端·javascript·计算机图形学
Mintopia22 分钟前
🧙‍♂️用 Three.js 判断一个点是否在圆内 —— 一次圆心和点的对话
前端·javascript·three.js
liliangcsdn38 分钟前
mac mlx大模型框架的安装和使用
java·前端·人工智能·python·macos
CssHero41 分钟前
基于vue3完成领域模型架构建设
前端
PanZonghui44 分钟前
用项目说话:我的React博客构建成果与经验复盘
前端·react.js·typescript
挽淚1 小时前
JavaScript 数组详解:从入门到精通
javascript
言兴1 小时前
教你如何理解useContext加上useReducer
前端·javascript·面试
sunbyte1 小时前
50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GoodCheapFast(Good - Cheap - Fast三选二开关)
前端·javascript·css·vue.js·tailwindcss
前端的日常1 小时前
网页视频录制新技巧,代码实现超简单!
前端