vue3源码解析

1.vue2和vue3的对比。

1.由于vue3本来就是用typescript写的,所以vue3对typescript的支持度更高。在vue2上所有的属性都放在this里,难以实现数据类型的推导。
2.在vue2上大量的api都挂载到vue的对象原型上,难以实现TreeShaking。
TreeShaking:在web的性能优化中,es6 推出了tree shaking机制,tree shaking就是当我们在项目中引入其他模块时,他会自动将我们用不到的代码,或者永远不会执行的代码摇掉,在Uglify阶段查出,不打包到bundle中。
3.在架构层面对跨平台dom渲染开发支持不太友好。
4.受到ReactHoot的启发,使用CompositionAPI。
在vue中我们有两种API,一种是选项式(Option API) ,一种是组合式(composition),其中选项式主要用于vue2,组合式主要用于vue3。 组合式API的特点:所有与特定功能相关地代码可以写到一块,代码比较集中; 选项式的特点:写代码的位置已经约定好,结构清晰但是。代码组织性差,相似的逻辑代码不便于复用,逻辑复杂代码多了不好阅读,同一功能的上下文代码难找。
5.对于虚拟DOM进行重写、对模板的编译进行了优化操作(具体有下文提到)。
6.vue3使用monorepo对文件进行集中管理,文件结构类似于下图,使用rollur对项目进行并行打包。
详情:https://github.com/vuejs
在这里插入图片描述

2.响应式api的使用

1.reactive:使复杂的数据类型变为响应式。

//基本使用
const data = reactive({
	name:'张三',
	age:'20',
	son:[
		{name:'张四'},
		{name:'张五'}
		]
})

2.shallowReactive:只会对第一层进行代理。

const data = shallowReactive({
	name:'张三',
	age:'20',
	son:[
		{name:'张四'},	 //这里的name将不会被代理
		{name:'张五'}
		]
})

3.readonly :将对象设置为只读。

const data = readonly({ // 整个对象都是只读的
	name:'张三',
	age:'20',
	son:[
		{name:'张四'},	 
		{name:'张五'}
		]
})

4.shallowReadonly :同理只会对第一层只读。
5.isProxy;isReactive;isReadonly 等用于检测是否是相对应的响应式对象。

3.响应式api的实现

使用高阶函数柯里化,将多个功能使用同一个函数去实现。

export function reactive(target) { 
	return createReactobj(target,false,reactiveHandlers) //高阶函数
}
export function shallowReactive(target) { 
	return createReactobj(target,false,shallowReactiveHandlers)
}
export function readonly(target) {
	return createReactobj(target,true,readonlyHandlers)
}
export function shallowReadonly(target) {
	return createReactobj(target,true,shallowReadonlyHandlers)
}


function createReactobj(target,isReadonly,baseHandlers){
//具体实现功能的函数

}

proxy实现get

//target为被代理的目标对象
new proxy(target,{
	get(){
	},
	set(){
	}
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值