美文网首页前端开发那些事儿
Vue 源码-数据响应式

Vue 源码-数据响应式

作者: Viewwei | 来源:发表于2021-02-21 23:01 被阅读0次

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


src/core/instance/init.js
src/core/instance/state.js
image.png
  • observe 函数介绍


    image.png
  • 拿到数据的时候首先判断 value 数据是不是响应数据,如果是响应数据的化,得到 ob实例,如果value 不是响应数据,那么调用 Observer 类初始化这个数据.


    image.png
  • 初始化Observer 的时候,首先给value 值定义一个ob属性,用来表示该对象是一个响应数据.每个对象拥有一个 ob 实例..判断 value 是不是一个数据,数组需要单独处理.数组最后在总结的时候单独讲解.当 value是一个对象的时候,把对象中的属性通过 defineReactive 函数设置为响应式数据.
    image.png
    image.png
    image.png
  • defineReactive 函数介绍
    每个对象拥有一个独立 dep 对象,对象中的每个 key 拥有一个 dep 对象,下面的例子拥有 4 的 dep对象.data 对象一个 dep 对象,a对象有一个 dep 对象,b属性有一个 dep 对象,a 作为一个属性也拥有一个 dep 对象.
  • 注意: 对象拥有的 dep 对象主要用于对象的setdelete
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
  • 注意:这里的 ob.dep 是对象的 dep 方法,通过 dep 的 notify 方法来更新组件的

相关文章

  • Vue3.2 响应式原理源码剖析,及与 Vue2 .x响应式的区

    本文源码版本 Vue3.2.11,Vue2 响应式源码剖析点这里 深入浅出 Vue2 响应式原理源码剖析[http...

  • 前端面试题【Day02】

    本篇绪论 1,Vue响应式原理 1,Vue响应式原理 在vue实例中声明的数据就是响应式的。响应式:数据发生改变,...

  • Vue 源码-数据响应式

    从上一篇文章知道数据初始化的 data 的数据发生在src/core/instance/init.js 中的,通过...

  • 03Vue源码实现

    Vue 源码实现 理解 Vue 的设计思想 MVVM 模式 MVVM 框架的三要素:数据响应式、模板引擎和渲染 数...

  • 2020-12-25

    Vue数据响应式 响应式:当一个物体对外界刺激做出反应,就是响应式。例如:我打你一拳你知道躲。 Vue 数据响应式...

  • Vue的响应式浅析

    1 Vue如何实现响应式? Vue的响应式是建立在监听data中的数据. 2 在Vue2中响应式的实现 Vue通过...

  • 学习笔记(十五)Vue.js源码剖析 - 响应式原理

    Vue.js 源码剖析 - 响应式原理 准备工作 Vue源码获取 这里主要分析 Vue 2.6版本的源码,使用Vu...

  • vue数据响应式的实现(附图)

    根据对vue源码的理解,对vue的数据响应式做一个简单的实现。定义myvue,使用方式仿造vue,简单实现插值表达...

  • Vue结构

    架构图 先看下Vue源码的基本架构图: 响应式数据 Vue进行实例化时,会执行_init函数,_init包括了以下...

  • Vue源码03-响应式原理

    这节将专门讲解vue MVVM响应式处理 Vue采用的是 实现数据的响应式 数据劫持 Observer类 Obse...

网友评论

    本文标题:Vue 源码-数据响应式

    本文链接:https://www.haomeiwen.com/subject/pfscfltx.html