vue3和vue2的区别
1、vue3使用ts重写。
2、支持composition Api
3、响应式原理改用proxy实现,可监听动态新增删除属性,以及数组变化。
// vue2的响应式使用defineProperty实现
const data = {
name: '123',
age: 18
}
const obj = {}
function proxyData(){
Object.keys(data).forEach(key => {
Object.defineProperty(obj, key, {
get(){
return data[key]
},
set(value){
if(newValue === data[key]) return
data[key] = value
// 附加响应式逻辑
}
})
})
}
proxyData()
// vue3
const data = {
name: '123',
age: 18,
}
const vm = new Proxy(data, {
get(target, key){
return target[key]
},
set(target, key, value){
if(target[key] === value) return
target[key] = value
// 响应式逻辑
}
})
4、编译优化,vue2通过编辑静态根节点优化diff,vue3标记和提升所有静态根节点,diff的时候只需要对比动态节点内容
5、移除了一些不常用的api(inline-template、filter)
6、生命周期的变化:使用setup代替了之前的beforeCreate和created
7、vue3的template模板支持多个根标签
8、Vuex状态管理:创建实例的方式改变,vue2为new Store,vue3为createStore
9、Route获取页面实例与路由信息:vue2通过this获取router实例,vue3通过使用getCurrentInstance/useRoute和useRouter方法获取当前组件实例
10、Props的使用变化:vue2通过this获取props里面的内容,vue3直接通过defineProps
11、父子组件传值:vue3向父组件传回数据时,如使用自定义名称需要使用defineEmits
