前端开发那些事儿

Vue 源码-数据响应式

2021-02-21  本文已影响0人  Viewwei

从上一篇文章知道数据初始化的 data 的数据发生在src/core/instance/init.js 中的,通过调用initState中的initState函数初始化数据和数据响应,在 initState 中通过调用initData数据来完成响应式


src/core/instance/init.js
src/core/instance/state.js
image.png
data:{
  a:{
      b:"1"
  }
}

defineReactive 函数中同时也需要设置 dep 和 watcher 的相互依赖.


src/core/observer/index.js
src/core/observer/dep.js
src/core/observer/watcher.js

通过 1 标注来判断是否存在当前 dep,如果不存在则加入 dep,watcher 加入 dep时候,dep同时也需要加入 watcher,如标注 3 所示


src/core/observer/dep.js
在设置完成的使用,会调用 dep 的 notify 函数进行组件的更新,如下图所示
image.png

数组的数据响应

src/core/observer/index.js

当数据是一个数组的时候,需要判断数据浏览器是否有圆形,如果有的化,直接把数组的原型克隆一个副本给当前数据当做原型
把数组设置为响应数据的时候,需要把重写数组的 7 个方法(push,pop,shift,unshift,splice,sort,reverse).在这 7 个方法中需要特别注意的是 push unshift,splice方式,因为这三个方法可能会为数组带来新的对象,带入新的对象也需要设置数据响应式


src/core/observer/array.js
上一篇 下一篇

猜你喜欢

热点阅读