最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue源码之响应式对象

    正文概述 掘金(韭菜也出头)   2020-12-02   397

    核心思想

    响应式对象,核⼼就是利⽤ Object.defineProperty 给数据添加了 getter 和setter,⽬的就是为了在我们访问数据以及写数据的时候能⾃动执⾏⼀些逻辑:getter 做的事情是依赖收集,setter 做的事情是派发更新。

    Vue会把props,data等变成响应式对象,在创建过程中,发现子属性也为对象则递归把该对象变成响应式。

    入口

    1. src/core/instance/init.js
    Vue源码之响应式对象
    1. src/core/instance/state.js
    Vue源码之响应式对象

    对于props

    initProps

    Vue源码之响应式对象

    props 的初始化主要是遍历定义的 props 配置。遍历的过程主要做两件事情:⼀个是调⽤ defineReactive ⽅法把每个 prop 对应的值变成响应式,可以通过 vm._props.xxx 访问到定义 props 中对应的属性。另⼀个是通过 proxy把 vm._props.xxx 的访问代理到 vm.xxx 上。

    对于data

    initData

    Vue源码之响应式对象

    data 的初始化主要也是做两件事,⼀个是对定义 data 函数返回对象的遍历,通过 proxy把每⼀个值 vm._data.xxx 都代理到 vm.xxx 上;另⼀个是调⽤ observe ⽅法观测整个 data的变化,把 data变成响应式。

    observe

    Vue源码之响应式对象

    observe⽅法的作⽤是给⾮VNode的对象类型数据添加⼀个Observer,如果已经添加过则直接返回,否则在满⾜⼀定条件下去实例化⼀个Observer对象实例。

    Observer

    Vue源码之响应式对象

    Observer的构造函数逻辑很简单,⾸先实例化 Dep 对象,这块后面再说,接着为data对象添加__ob属性值为此类, def 的定义在src/core/util/lang.js 中:

    Vue源码之响应式对象
    Vue源码之响应式对象

    defineReactive

    Vue源码之响应式对象

    defineReactive函数最开始初始化Dep对象的实例,接着拿到obj的属性描述符,然后对⼦对象递归调⽤ observe⽅法,这样就保证了⽆论 obj 的结构多复杂,它的所有⼦属性也能变成响应式的对象,这样我们访问或修改obj 中⼀个嵌套较深的属性,也能触发 getter 和 setter。最后利⽤Object.defineProperty去给 bj 的属性 key 添加 getter和 setter。

    总结

    Vue源码之响应式对象
    Vue源码之响应式对象

    起源地下载网 » Vue源码之响应式对象

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元