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')
相关推荐
mldong3 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排3 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60614 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角5 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!5 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰5 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi7 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen7 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马8 小时前
AI源码分析:拆解模型底层实现逻辑
前端
BillKu8 小时前
全局样式变量:CSS 自定义属性(--border-color)和SCSS 变量($border-color)的说明
javascript·css·scss