vue源码笔记之——响应系统

vue是一种声明式范式编程,使用vue者只需要告诉其想要什么结果,无需关心具体实现(vue内部做了,底层是利用命令式范式)

1. reactive为什么只能操作对象,对于基本数据类型,需要用ref?

因为vue3存储以来的对象用的是weakMap,其键必须为对象。源码位置如下。targetMap存放的是所有的依赖在这里插入图片描述

2. 是怎么存放依赖?

主要用了一个weakMap,结构为:

{ // weakMap 
	key: '', //需要代理的对象
	value:  // map,存放对应属性
		{	
			key: '', // 属性值
			value: [] // 依赖关系
		}
}
// 这段代码会生成以下图片的一个对象
const obj = reactive({
	name: 'zqw',
	sex: 'girl'
})
effect(() => {
  document.querySelector('#p1').innerText = obj.name
})
effect(() => {
  document.querySelector('#p2').innerText = obj.name
})

在这里插入图片描述

3. 访问ref的数据为什么必须.value

ref构建简单数据类型时,本身并不具备响应性,要实现响应性,需要主动去触发set get函数,所以需要捆绑value属性去使用
ref(xxx)如果是一个复杂数据类型(对象)的话,实现响应性实际上和reactive一样,创建了一个proxy的数据进行了数据的“劫持”
set复杂数据类型都会触发get Value方法
set简单数据类型会触发set Value方法

在这里插入图片描述
在这里插入图片描述

4. 实现computed和watch函数的核心为调度器,它的作用
  • 改变执行顺序
  • 改变执行规则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值