首页 > 其他分享 >vue2升级vue3

vue2升级vue3

时间:2024-11-27 19:54:44浏览次数:8  
标签:vue vue3 升级 vue2 import router vuex

vue2升级vue3

针对 ../vue3-elm-master项目升级做的解析, 该项目目前是webpack@1, vue@2.

1. vue2的缺点,vue3的优势.

vue2的劣势

  1. vue2的组件代码复用是用mixin, 容易出现命名冲突, 且无法解决业务逻辑的复用.
    1. vue2的mixin代码复用不好处理,本质是把mixin里的属性和方法直接赋值给组件A, 组件B, 而不是整个业务逻辑.
    2. 业务逻辑是包含数据和方法的, 但是vue2的mixin中的 数据和方法既没有相互关联,又没有通其他业务逻辑隔离, 而是各自独立的. 导致业务关联性不强, 而vue3的hooks则把data和方法放到了一起, 增加了业务关联性
    3. vue2有重名问题, mixin的属性名,方法名,有可能和组件A的属性名,方法名重合, 而vue3的属性值获取是通过getData来获取的,hooks没有重名问题.

vue2的mixin缺陷

  1. vue2对typescript支持不足, vue3天然支持ts
  2. vue2内部实现过于依赖this, 很多方法都是放到this上,导致无法进行treeshaking.摇树叶, 就导致项目比较大.

vue3的优势

  1. vue3的代码复用比较方便. 通过hooks复用,数据和函数联系紧密, 属性名获取是通过getData获取,没有命名重复问题.
  2. vue3脚手架默认支持ts
  3. vue3的函数独立性比较好, 在treeshaking方面做的比较好, 有明显的性能提升,
    1. 打包大小减少41%
    2. 初次渲染快55%, 更新快133%
    3. 内存使用减少54%
  4. vue3支持vue2的大多数特性, 能够对vue2进行向下兼容
  5. vue3.2通过setup语法糖进一步简化了开发, 使代码更优雅
  6. 增加了很多新特性, 比如Fragment, Teleport, Suspense

vue3配置升级

升级内容包括: vue@3, vuex@4, vue-router@4

  1. 把原来的devDependencies全部删除了, 不再使用webpack启动, 而是使用了 vue-cli-service启动
    "devDependencies": {
        "@vue/cli-service": "^5.0.0-beta.2",
        "@vue/compiler-sfc": "^3.4.38",
        "sass": "^1.77.8",
        "sass-loader": "^16.0.1"
    },
  1. 启动时遇到了扩展名, 路径别名问题, vue.config.js里的configureWebpack配置解决
    1. 遇到webpack的配置问题, 在vue.config.js里做配置, configureWebpack属性里的内容就是webpack的配置, 会合并到最后的启动项里.
    2. 比如 "src/style/common"引入失败, common是common.scss, 需要给引入文件配置默认的后缀名,
    3. vue-cli里绝对路径需要再路径前加"/", 也就是说"src"不合法,需要"/src",所以配置了别名src: "/src";
// vue.config.js
module.exports = {
    configureWebpack: {
        resolve: {
            alias: {
                'src': path.resolve(__dirname, './src'),
                'assets': path.resolve(__dirname, './src/assets'),
                'components': path.resolve(__dirname, './src/components')
            },
            extensions: ["scss", "vue", "js", "ts", "css"]
        }
    }
}

vue3, vuex@4, vue-router@4的初始化

vue3, vuex@4, vue-router@4 的创建和vue2,Vuex@1, vue-router@1是不同的, 最大的不同是,vue2的相关函数都是全部导入到页面, 然后创建
而vue3, 为了treeshaking, 只导入创建函数.

//vuex
import mutations from './mutations'
import actions from './action'
import getters from './getters'
import {createStore} from "vuex";
export default createStore({
	state: {},
	getters,
	actions,
	mutations,
})
// vue3和vue-router
import { createApp } from 'vue'; 
import {createMemoryHistory, createRouter} from "vue-router";
import App from './App'
import routes from './router/router'
import store from './store/'
const router = createRouter({
    history: createMemoryHistory(),
    routes: [
        {path: "/", component: App}
    ],
})

const app = createApp(App);
app.use(router);
app.use(store);
app.mount("#app");

vue3, vuex, vue-router的使用

vue: setup, vuex: useStore, vue-router: useRouter, useRoute
针对 G:\webpack-learn\vue3-elm-master\src\page\login\login.vue文件做了vue3-setup风格代码修改

  1. vuex
// 导入的vuex方法
import { useStore } from 'vuex';
const store = useStore(); //创建vuex对象.
        // 执行vuex的方法
store.commit('RECORD_USERINFO', userInfo);
  1. vue-router
// 导入的vue-router方法
import { useRoute, useRouter } from 'vue-router';
const route = useRoute(); // 创建route对象
const router = useRouter();

    // 使用router跳转路由
router.go(-1);
  1. vue3
// 导入组件, 可以直接在 template中使用<head-top></head-top>
import headTop from '../../components/header/head';
// 导入的vue方法
import { ref, reactive, onMounted, computed } from 'vue';
const validate_token = ref(null); //获取短信时返回的验证值,登录时需要
const computedTime = ref(0); //倒数记时

// 值是对象,用reactive
const userInfo = reactive(null); //获取到的用户信息
//获取验证吗,线上环境使用固定的图片,生产环境使用真实的验证码
const getCaptchaCode = async function () {
    let res = await getcaptchas();
    captchaCodeImg.value = res.code;
};

onMounted(getCaptchaCode);
//判断手机号码
const rightPhoneNumber = computed(function () {
    return /^1\d{10}$/gi.test(phoneNumber.value);
});

标签:vue,vue3,升级,vue2,import,router,vuex
From: https://www.cnblogs.com/bridge7839/p/18573000

相关文章

  • vue3手搓固钉组件
    #创作灵感    今天用固钉组件时发现element-ui的固钉会阻止移动端移动事件,我思来想去决定自己写一个固定组件得了实现思路        获取钉子的ref实例并监听window滚动事件,当window.scrollY等于钉子的offsetHeight,添加position:fixed和top:0到钉子上,就能强......
  • vue3-路由Router
    基本使用(与vue2语法有差异)安装vue-router,vue3需要使用vue-router的4版本npmivue-router@4编写路由文件//引入createRouterimport{createRouter,createWebHistory}from"vue-router";//引入组件importUserInfofrom"@/components/UserInfo.vue";//创......
  • Jenkins升级到最新版本后无法启动
    1.场景还原最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下:运行jenkins命令提示invalidJavaversionjenkins--versionjenkins:invalidJavaversion:javaversion"1.8.0_202"Java(TM)SERuntimeEnvironment(build1.8.0_202-b08)J......
  • postgres数据库大版本升级
    Postgres数据库大版本升级1.升级的介绍当前PostgreSQL版本号由主要版本号和次要版本号组成。10之前的版本由三部分组成,10开始只有两部分数字组成。例如,在版本号10.1中,10是主要版本号,1是次要版本号,这意味着这将是主版本10的第一个次要版本。对于PostgreSQL版本10.0之前的版本,版本......
  • 腾讯通RTX升级替代方案,兼容移动端及Linux内核国产系统
    一、腾讯通RTX继续使用的主要难题腾讯通RTX自从停止更新并下架官网后,用户无法继续获得更新、技术支持和资源下载。同时面临以下无法从根本解决的问题:●不兼容国产系统与移动端:腾讯通RTX仅支持Windows和Mac系统,无法在基于Linux内核的国产操作系统及移动端设备上正常使用。●组......
  • vue3-setup中使用响应式
    基本类型的响应式数据在Vue3中,ref是一个函数,用于创建响应式的数据。它主要用于处理基本类型(如数字、字符串、布尔值等)的数据响应式当我们调用ref函数时,会返回一个包含一个.value属性的对象。这个对象会被转换成Proxy对象,通过拦截getter和setter操作,实现对.valu......
  • 数据库小版本升级
    PostgresQL14.9升级到14.13step1.查看当前数据库版本和测试数据[postgres@localhost~]$postgres-Vpostgres(PostgreSQL)14.11[postgres@localhost~]$psqlpsql(14.11)Type"help"forhelp.postgres=#postgres=#selectversion();version-----------------......
  • 用 Vue2 打造防诈骗问答系统:完整代码与项目实战 Vue2 实现交互式问答页面:单选、多题切
    以下是构建一个防诈骗测试页面的完整代码实现,包含单选题功能,并可记录用户选择的答案,所有功能均基于Vue2实现:完整代码<!DOCTYPEhtml><htmllang="zh"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initia......
  • vue3-事件总线
    事件总线的概念:事件总线(EventBus)可以理解为一个全局的发布/订阅模式,可以通过它来实现不同组件之间的消息传递。在Vue实例或Vue组件中充当一个中央枢纽,通过它可以让一个组件发出事件,而其他组件监听并响应这些事件事件总线的创建Vue3版本中,我们不再使用newVue()来创建事件总......
  • 华为鸿蒙智家品牌升级背后:开拓者,引领者,赋能者
    今天,华为重磅推出全新品牌“华为鸿蒙智家”亮相华为Mate品牌盛典。华为作为产业的开拓者,一直引领产业进化,带动产业从懵懂到成熟。这一次品牌升级将借势鸿蒙,为空间智能产业打开更大的想象空间。持续进化,带来更高阶的智感作为一个热门赛道,科技巨头和家电企业均积极布局智能家居,......