当前位置:网站首页 > Vue.js开发 > 正文

vue2和3什么区别(vue2.x和vue3.x的区别)



 

核心方法

vue2.x, 通过Object.defineProperty(),遍历循环劫持所有数据

vue3,通过proxy(),可以直接监听对象

 

 

diff算法

vue2.x,在数据发生变化时,会生成一个虚拟dom,并和旧的虚拟dom进行对比,这个对比时全量对比,每个节点都会进行比对

vue3,在数据变化时,会生成一个虚拟dom,且为哪些不会发生变化的节点添加静态标记,在与旧虚拟dom对比时,会忽略静态标记的内容,提升速度

 

 

 

创建和挂载方式

 

vue2.x挂载

import Vue from 'vue' import App from 'https://blog.51cto.com/u_/App' import store from 'https://blog.51cto.com/u_/store' import router from 'https://blog.51cto.com/u_/router' new Vue({ el: '#app', router, store, render: h => h(App) })

 

vue3

import { createApp } from 'vue' import App from 'https://blog.51cto.com/u_/App.vue' import router from 'https://blog.51cto.com/u_/router' import store from 'https://blog.51cto.com/u_/store' const vm = createApp(App) vm.use(store).use(router).mount('#app');

 

 

 

组件创建

vue2.x

<template> <div /> </template> <script> export default { name: '', data() { return { } } } </script>

 

 

vue3

<template> <div /> </template> <script> import { defineComponent } from 'vue' export default defineComponent({ name: '', setup() { return { } } }) </script>

 

 

 

 

全局变量

vue2.x

//main  Vue.prototype.$xxx='xxxx' //其他组件 this.$xxx

 

 

vue3

var app=createApp(App) app.config.globalProperties.$xxx='xxx' //组件内使用 import { getCurrentInstance } from 'vue' const { proxy } = getCurrentInstance() const sysName = proxy.$systemName

 

 

 

生命钩子

vue2.x

<script> export default { name: '', data() { return { } }, beforeCreate(){ //初始化前  }, created(){ //初始化  },
actived(){
//keep-alive
},
deactived(){

}, beforeMounte{





//挂载前 }, mounted(){ //挂载 }, beofreUpdate(){ //数据更新前 }, update(){ //数据更新 }, beforeDestroy(){ //销毁前 }, destroy(){ //销毁 } } </script>

 

 

 

vue3

<script> import { defineComponent,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted } from 'vue' export default defineComponent({ name: '', setup() { onMounted(() => { console.log('mounted!') }) onUpdated(() => { console.log('updated!') }) onUnmounted(() => { console.log('unmounted!') }) return { } } }) </script>

 

 

 

其他不同

1,变量定义

vue2.x,直接在data(){ return { }} return里的对象放置属性即可

vue3,在setup里,需要在vue里引入ref和reactive来分别定义基础类型和引用类型,再return

 

2,props,emit,slots,attrs 

vue2.x, props在注册完毕后,可以直接通过this.xxx来调用数据,emit,slots,attrs这些直接通过this.$emit,this.$slots,this.$attrs使用

vue3, props在注册完毕之后,可以在setup里参数获取

setup (props,{emit,slots,attrs}){ }

 

 

 

3,router的创建

vue2.x

import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const routes=[ ] const createRouter = () => new Router({ mode: 'hash',//history  routes: routes }) const router = createRouter() export default router

 

 

vue3

import { createRouter,createWebHashHistory} from "vue-router"; const routes = [ ] export const router = createRouter({ history: createWebHashHistory(), routes: routes })

 

 

4,router的使用

vue2.x 直接使用this.$router和this.$route使用

vue3,需要从vue-router引入 useRoute userRouter两个函数的实例来使用

 

 

5,store的创建

vue2.x

import Vue from 'vue' import Vuex from 'vuex' import appStore from 'https://blog.51cto.com/u_/appStore' Vue.use(Vuex) consot modules={} const store = new Vuex.Store({ modules:{ appStore } }) export default store

 

 

 

 

vue3

import { createStore } from 'vuex' import appStore from 'https://blog.51cto.com/u_/appStore' export default createStore({ modules: { appStore } })

 

 

 

5,store的使用

vue2.x,直接通过this.$store.xxx使用

vue3.x,需要从vuex引入useStore,const store=useStore()

 

到此这篇vue2和3什么区别(vue2.x和vue3.x的区别)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vue安装使用(vue安装使用axios)2025-10-26 19:18:07
  • spss22和25哪个好用(spss25.0和26.0区别)2025-10-26 19:18:07
  • map转jsonobject对象 gson(map转jsonstring)2025-10-26 19:18:07
  • map 转 json(map转json)2025-10-26 19:18:07
  • vue2关闭当前页面跳转路由(vue如何关闭当前页面)2025-10-26 19:18:07
  • vue项目反编译(vue打包的代码反编译)2025-10-26 19:18:07
  • docker最新版本(docker 19.03)2025-10-26 19:18:07
  • vue父子组件传值方法(vue父子组件传值方式)2025-10-26 19:18:07
  • map转换成json字符串(map转换为json字符串)2025-10-26 19:18:07
  • vue2生命周期和vue3生命周期(vue生命周期几个)2025-10-26 19:18:07
  • 全屏图片