总结vue3和vue2区别

2023-12-11  本文已影响0人  简单tao的简单

1. 双向数据绑定原理(数据劫持方式)不同

Vue2 使⽤的是Object.defineProperty()进⾏数据劫持,结合发布订阅的⽅式实现。

Vue3 使⽤的是Proxy代理,使⽤ref或者reactive将数据转化为响应式数据

2. 是否支持碎片

3. 组件模板是否有唯一顶层元素的限制

<template>
   <div>
        <h1>第三界面</h1>
        <button>测试 </button>
   </div>
</template>
<template>
        <h1>第三界面</h1>
        <button>测试 </button>
</template>

3. API类型不同

import {useRoute,useRouter} from "vue-router"  路由
import { onMounted, reactive ,defineProps,defineEmits,useContext} from "vue";  
import {useStore} from 'vuex'   //存储
const store = useStore()
 Object.assign(userInfo, res.data);
 console.log("userInfo", userInfo);
  store.commit("updateUserInfo",userInfo)

//响应式数据
 let res = reactive({
        list1:[]
    })
// 钩子
onMounted(() => {
  
})
//插槽 组件上的属性
const {slots,attrs} = useContext()
// props   组件传参
const props = defineProps({
  num: Number,
});
//事件 触发
const emit = defineEmits(["change"]);
let changeNum = () => {
  emit("change", 10);
};
let route = useRoute()
let router = useRouter()

4. 定义数据变量和方法不同

5. 生命周期钩子函数不同

vue2中的生命周期:

vue3中的生命周期:

6. 父子传参不同

export default {
  emits: ['inFocus', 'submit'],
  setup(props, ctx) {
    ctx.emit('submit')
  }
}

// 与 setup() 上下文对象中的其他属性一样,emit 可以安全地被解构:

export default {
  emits: ['inFocus', 'submit'],
  setup(props, { emit }) {
    emit('submit')
  }
}

7. 指令不同

8、main.js文件不同

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

import './assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'

const app = createApp(App)

app.use(createPinia())
app.use(router)

app.mount('#app')

9. 支持TS

10. Diff 算法的提升

vue3 在 vue2 的 diff 算法的基础上增加了静态标记,元素提升和事件缓存等优化。使得速度更快。

11. 打包体积变化

vue2 官方说的运行时打包师 23k,但这只是没安装依赖的时候,随着依赖包和框架特性的增多,有时候不必要的,未使用的代码文件都被打包了进去,所以后期项目大了,打包文件会特别多还很大。

Vue 3 中,我们通过将大多数全局 API 和内部帮助程序移动到 Javascript 的 module.exports 属性上实现这一点。这允许现代模式下的 module bundler 能够静态地分析模块依赖关系,并删除与未使用的 module.exports 属性相关的代码。模板编译器还生成了对树抖动友好的代码,只有在模板中实际使用某个特性时,该代码才导入该特性的帮助程序。

尽管增加了许多新特性,但 Vue 3 被压缩后的基线大小约为 10 KB,不到 Vue 2 的一半

12. vue3新增组件

<button @click="showToast" class="btn">打开 toast</button>
<!-- to 属性就是目标位置 -->
<teleport to="#teleport-target">
    <div v-if="visible" class="toast-wrap">
        <div class="toast-msg">我是一个 Toast 文案</div>
    </div>
</teleport>

13. vue3 setup()函数特性

上一篇 下一篇

猜你喜欢

热点阅读