vue2.0与vue3.0的区别—教你快速从vue2转换到vue3的开发

      使用vue3开发过一段时间了,开发过程中总结了些语法上的区别。下面不去考虑原理和源码,只在使用方式上列出两者的区别,有了这些,可以让开发者快速从vue2转换到vue3的开发中。(内容会持续更新~)

一、入口文件main.js

1、引入vue

  vue2.0写法

import Vue from 'vue'

  vue3.0写法 

import { createApp } from 'vue'
const app = createApp(App)

2、挂载vue实例

   vue2.0写法

new Vue({
...
}).$mount('#app')

  vue3.0写法 

app.mount('#app');

二、路由相关

 1、基本使用

    vue2.0写法

this.$route
this.$router

  vue3.0写法 

import { useRoute ,useRouter} from 'vue-router'
const route = useRoute()
const router = useRouter()

2、路由模式(官方文档参考

    vue2.0写法

import Router from 'vue-router'
var router = new Router({
  mode: 'history' // hash | history
})

  vue3.0写法 

import { createRouter, createWebHistory } from 'vue-router'
createRouter({
  history: createWebHistory(),
  routes: []
})

3、删除了*通配符路由(官方文档参考

     vue2.0写法

{
  path: '*',
  redirect: '/404'
}

  vue3.0写法 

{
  path: '/:catchAll(.*)',
  redirect: '/404'
}

4、keep-alive与router-view的共用,官方文档参考

    vue2.0写法

<keep-alive>
    <router-view />
</keep-alive>

  vue3.0写法

<router-view v-slot="{ Component, route }">
    <keep-alive>
        <component :is="Component" />
    </keep-alive>
</router-view>

三、VueX相关

1、获取state 

   vue2.0写法

import { mapGetters } from 'vuex'
computed: {
    ...mapGetters(['storeKey'])
}

  vue3.0写法

import { useStore } from 'vuex'
const store = useStore()
const storeKey = computed(() => store.state.storeKey)

四、事件处理

1、删除了$on$off 和 $once 方法,可用实现了事件触发器接口的外部库代替,官方文档参考

  使用tiny-emitter库 

import emitter from 'tiny-emitter/instance'

export default {
  $on: (...args) => emitter.on(...args),
  $once: (...args) => emitter.once(...args),
  $off: (...args) => emitter.off(...args),
  $emit: (...args) => emitter.emit(...args)
}

  使用 mitt 库 

import { mitt } from 'mitt'
const emitter = mitt()
emitter.on('fun',fun)
emitter.off('fun',fun)

2、虽然vue3保留了父子组件之间的 $emit 方法,但需要在子组件中定义需要emit的事件

export default {
  emits: ['funcName1','funcName2']
}

五、其他

1、去掉filter,推荐用方法调用或计算属性代替,官方文档参考

2、数据响应式 

  vue2.0写法

$set(key,value)

  vue3.0写法 

import { ref, reactive } from 'vue'
export default {
    setup() {
        const num = ref(0);
        const obj = reactive({
            name: 'nie'
        });
        return {
            num,
            obj
        }
    }
}

3、在插件中使用vue实例

   vue2.0写法,直接通过 import 引入 vue 实例

import Vue from 'vue'

  vue3.0写法 ,install中的 app 参数为 vue 实例

export default {
  install: (app, options) => {
    // Plugin code goes here
  }
}

4、v-html 指令,vue2中,添加了 v-html 指令的标签内部还可以输入其他内容(即使内容无效);vue3中,添加了 v-html 指令的标签内部输入其他内容会报错。

5、nextTick

   vue2.0写法

this.$nextTick(() => {
    //... 
});

  vue3.0写法 

import { nextTick } from 'vue'
export default {
    setup() {
        nextTick(() => {
            //...
        })
        return {
            
        }
    }
}

6、watch的使用

    vue2.0写法

watch:{
    key(){
        //...
    }
}

  vue3.0写法,需要watch一个响应式对象,如果不是,可用函数的方式,如下

watch(()=>key,()=>{
    //...
})

上一篇:杨孟哲:云平台安全访问控制的设计与实现揭秘


下一篇:第三十一篇:vue3和vue2的不同