当前位置: 首页 > news >正文

《Vue3 基础知识》 使用 GoGoCod 升级到Vue3+ElementPlus 适配处理

此篇为 《Vue2+ElementUI 自动转 Vue3+ElementPlus(GoGoCode)》 的扩展!

Vue3 适配

Vue3 不兼容适配

Vue 3 迁移指南 在此,本章只讲述项目或组件库中遇到的问题;

  1. Vue3 移除 o n , on, onoff 和 $once 实例方法,事件总线Bus的差异

  2. Vue3 CSS 深度选择器 有变化,有警告[@vue/compiler-sfc] the >>> and /deep/ combinators have been deprecated. Use :deep() instead.

    /* Vue2 写法一 */
    .a >>>.b
    /* Vue2 写法二 */
    .a /deep/ .b/* Vue3 写法*/
    .a :deep(.b) 
    
  3. Vue props 多个类型,不要用 | ,用数组 []。否则报错 expected "indent", got "eos"

    expandLevel: {// type: Number | String,// vue2 可以,vue3 报错type: [Number, String], // vue2/vue3 正确default: 1,
    }
    

GoGoCode 自动升级适配

  1. v-model:value 报错,全局搜 v-model:value 并全局替换为 v-model。其实 Vue2Vue3 都不加 :value,不知为何转换时加上了…

    在这里插入图片描述

  2. 插槽报错Duplicate slot names found 发现重复的插槽名称 。仅两个 slot 在一块报错…

  3. HTML 元素上的方法,例如 @click= 中有多个表达式仅换行没分号 ; ,这是语法错误。建议多个表达式就写在方法里

Webpack 转 Vite 适配

动态加载文件 Webpackrequire.context, Viteimport.meta.glob

  • src\params.js
  • src\store\index.js

Webpackrequire.context

const modulesList = require.context("./src/components", true, /\.vue$/);
const modules = modulesList.keys().reduce((obj, modulePath) => {// 文件名const moduleName = modulePath.replace(/^\.\/(.*)\/(.*)\.\w+$/, "$2");// 模块对象let moduleObj = modulesList(modulePath);// 放入模块obj[moduleName] = moduleObj.default;return obj;}, {});

Viteimport.meta.glob

// 注意加在 `eager: true` 是同步处理
const modulesList = import.meta.glob('./src/components/**/*.vue', { eager: true });
const modules = Object.keys(modulesList).reduce((obj, path) => {// 文件名const moduleName = path.replace(/(.*\/)*([^.]+).*/ig, "$2");// 放入模块obj[moduleName] = modulesList[path].default;return obj;
}, {})
const modulesFiles = import.meta.glob('./funcs/**/*.vue')let modules = {};
for (const path in modulesFiles) {modulesFiles[path]().then((mod) => {// 文件名const moduleName = path.replace(/(.*\/)*([^.]+).*/ig, "$2");// 放入模块modules[moduleName] = mod.default;})
}

Element Plus 适配

  1. el-button 警告 [props] [API] type.text is about to be deprecated in version 3.0.0, please use link instead.

解决: 官网中 el-button type=“text” 用于链接按钮已在 v3.0.0 废除

// 原
<el-button type="text">文字按钮</el-button>// 改为
<el-button type="primary" link>文字按钮</el-button>

  1. el-input 警告 Invalid prop: validation failed. Expected one of ["", "default", "small", "large"], got value "mini".

解决: 属性 sizeElementUIElementPlus 之间有差异

  • Element UI 用 medium / small / mini
  • Element Plus 用 large / default / small

  1. el-tabs 方法 tab-click 返回值 ElementUI 和 ElementPlus 不一样

差异: ElementUI el-tabs 和 ElementPlus el-tabs

在这里插入图片描述


  1. el-input ElementUI 和 ElementPlus 有点差异,ElementPlus 多嵌套了一层 el-input__wrapper

解决: 改造 src\assets\scss\elements\input.scss,设置 padding:0 !important

在这里插入图片描述


  1. Element Icon 图标 警告 voided by marking the component with markRawor usingshallowRefinstead ofref.

解决: 以转换后一张图系统文件 src\components\mode-refreshing\head.vue 为例。代码第 10ElIconSetting,放在 data() 中,做了深度响度,会有必要的开销。

// 修改前
import {Setting as ElIconSetting,DataAnalysis as ElIconDataAnalysis,SwitchButton as ElIconSwitchButton,
} from '@element-plus/icons-vue'
export default {data() {return {ElIconSetting,ElIconDataAnalysis,ElIconSwitchButton}},
}

提示加上 markRaw 不被代理 或 shallowRef 浅层响应。如代码 2,11-13

// 修改后
import { shallowRef } from 'vue'
import {Setting as ElIconSetting,DataAnalysis as ElIconDataAnalysis,SwitchButton as ElIconSwitchButton,
} from '@element-plus/icons-vue'
export default {data() {return {ElIconSetting: shallowRef(ElIconSetting),ElIconDataAnalysis: shallowRef(ElIconDataAnalysis),ElIconSwitchButton: shallowRef(ElIconSwitchButton),}},
}
http://www.lryc.cn/news/294177.html

相关文章:

  • c#string方法对比
  • Electron实战(一):环境搭建/Hello World/打包exe
  • 【C++】运算符重载详解
  • 评论区功能的简单实现思路
  • Java自救手册
  • ASM-HEMT参数提取和模型验证测试
  • 浅压缩、深压缩、双引擎、计算机屏幕编码……何去何从?
  • 2020年通信工程师初级专业实务真题
  • Linux常见面试题汇总
  • C语言小游戏:贪吃蛇(游戏开发的环境和功能介绍)
  • ElementUI Form:InputNumber 计数器
  • apk反编译修改教程系列---修改apk的默认颜色 布局颜色 手机电脑同步演示【十】
  • 响应式开发如何设置断点,小屏幕界面该如何显示(有动图)
  • Java基础 集合(二)List详解
  • UE4运用C++和框架开发坦克大战教程笔记(十七)(第51~54集)
  • GaussDB新体验,新零售选品升级注入新思路【华为云GaussDB:与数据库同行的日子】
  • C语言问题汇总
  • QT 的 blockSignals(true) 的作用范围
  • 【C++私房菜】类和对象万字详解
  • PDF下载添加水印和访问密码
  • 基于SSM+MySQL的的新闻发布系统设计与实现
  • 记录首次使用yolov8-obb
  • 深度学习环境配置:Anaconda 安装和 pip 源
  • 100 个 NLP 面试问题
  • C# OMRON PLC FINS TCP协议简单测试
  • MQTT在linux下服务端和客户端的应用
  • 韦达定理用处多
  • Kotlin-类
  • redis基本数据结构介绍
  • 云数据库RDS云监控