目标:实现简易数据响应式
1 | function defineReactive(obj, key, val) { |
当前数据只能通过defineReactive一个个定义,所以我们需要顶一个observe方法,来一次性定义响应式数据
1 | //observe->传入一个对象,把该对象下的数据都变成响应式数据 |
当前代码存在问题:如果key对应的值是一个对象,那么该对象却不是响应式的,所以我们应该递归其值,把它变成响应式数据
我们知道observe会遍历给定对象的key,把Key变成响应式数据,所以,我们可以在定义响应式之前先判断当前key所对应的值是否需要变成响应式
1 | function defineReactive(obj, key, val) { |
这时还存在一种情况,当我们的新值是一个对象时,应该重新赋值了,所以该新对象里的数据不再是响应式数据了,所以我们在set中应该重新把它变成响应式数据
1 | function defineReactive(obj, key, val) { |
接下来,我们需要处理动态新增key
1 | //使用set函数 |
其实我们的功能已经差不多了,但是我们目前只是在处理对象的响应式,我们可能还存在数组响应式数据
要想实现数组响应式
- 找到数组原型
- 覆盖那些能够修改数组的更新方法,使其可以通知更新
- 将得到的新的原型设置到数组实例原型上
1 | //1.替换数组原型中7个方法 |