vue中给data添加属性会发生什么(vuedata里增加一个属性实时刷新吗)

技术Vue data中随意改一个属性视图就会更新吗这篇文章主要讲解了“Vue data中随意改一个属性视图就会更新吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue

这篇文章主要讲解了"武田中随意改一个属性视图就会更新吗",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"武田中随意改一个属性视图就会更新吗"吧!

先写个简单的演示,其中数据中有四个属性a,b,c,d,在模板中被利用到的属性只有a,b。看看是不是只有a,b才会调用Dep收集起来呢?

newVue({ 0

el:'#app ',

数据(){ 0

返回{

a:1,

b:2,

c:3,

d:4,

};

},

已创建(){ 0

控制台。日志(这个。b);

this.b=' aaa '

},

模板:“Divhelloworld { { a } } { { b } }/div”,

});在Vueinstance/state.js里面,会利用proxy把每个属性都 代理一遍

常量键=对象键(数据)

constprops=vm .$选项。道具

constmethods=vm .$options.methods

leti=keys.length

而(我-){ 0

常量键=键[I]

if(propshasow(道具,钥匙)){ 0

process.env.NODE_ENV!=="生产"警告(

` dataproperty'${key} '是一个isalreadydeclaredasaprop。'

" Usepropdefaultvalueinstead改为",

伏特计

)

}elseif(!以色列(密钥)){ 0

//代理对象的属性

代理(虚拟机,` _数据`,密钥)

}

}

//观察者数据

观察(数据,真/*作为跟踪数据*/)利用defineReactive对data中的每个属性进行劫持

观察(数据,真/*asRootData*

/);

// observe
const keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
  defineReactive(obj, keys[i]);
}

// defineReactive
Object.defineProperty(obj, key, {
  enumerable: true,
  configurable: true,
  get: function reactiveGetter() {
    const value = getter ? getter.call(obj) : val;
    // 重点在这里,后续如果在模板中使用到的属性,都会被执行reactiveGetter函数
    // 被Dep类 收集起来
    if (Dep.target) {
      console.log(`${key} 属性 被Dep类收集了`)
      dep.depend();
      if (childOb) {
        childOb.dep.depend();
        if (Array.isArray(value)) {
          dependArray(value);
        }
      }
    }
    return value;
  },
  set: function reactiveSetter(newVal) {
    const value = getter ? getter.call(obj) : val;
    /* eslint-disable no-self-compare */
    if (newVal === value || (newVal !== newVal && value !== value)) {
      return;
    }
    if (setter) {
      // 这里是处理computed set 函数
      setter.call(obj, newVal);
    } else {
      val = newVal;
    }
    childOb = !shallow && observe(newVal);
    // 如果我们在更改属性时,就会调用notify 异步更新视图
    dep.notify();
  },
});

执行$mount进行视图挂载

if (vm.$options.el) {
  vm.$mount(vm.$options.el);
}

$mount 是调用 Vue 原型上的方法, 重点是最后一句 mount.call(this, el, hydrating)

Vue.prototype.$mount = function (
  el?: string | Element,
  hydrating?: boolean
): Component {
  el = el && query(el);

  const options = this.$options;
  // resolve template/el and convert to render function
  /**
   * 查看render 函数是否存在?如果不存在就解析template模板
   * Vue渲染页面时,有两个方式 1. template,2. render,最终所有的模板类的都需要使用render去渲染
   */
  if (!options.render) {
    let template = options.template;
    if (template) {
      if (typeof template === 'string') {
        if (template.charAt(0) === '#') {
          template = idToTemplate(template);
          /* istanbul ignore if */
          if (process.env.NODE_ENV !== 'production' && !template) {
            warn(
              `Template element not found or is empty: ${options.template}`,
              this
            );
          }
        }
      } else if (template.nodeType) {
        template = template.innerHTML;
      } else {
        if (process.env.NODE_ENV !== 'production') {
          warn('invalid template option:' + template, this);
        }
        return this;
      }
    } else if (el) {
      // 如果模板不存在,就创建一个默认的html模板
      template = getOuterHTML(el);
    }
  }
  // 重写了Vue.prototype.$mount ,最终调用缓存的mount方法完成对$mount的挂载
  return mount.call(this, el, hydrating);
};

这里mount调用了 mountComponent(this, el, hydrating) 方法,而 mountComponent是执行了 _render函数,最终_render是调用render 生成一个vnode。

const { render, _parentVnode } = vm.$options;
vnode = render.call(vm._renderProxy, vm.$createElement);

Vue data中随意改一个属性视图就会更新吗

最后一张图可以看到是render函数在渲染我们demo里面的template模板,最终只有a, b两个属性才会被Dep类收集起来。

Vue data中随意改一个属性视图就会更新吗

感谢各位的阅读,以上就是“Vue data中随意改一个属性视图就会更新吗”的内容了,经过本文的学习后,相信大家对Vue data中随意改一个属性视图就会更新吗这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/148248.html

(0)

相关推荐

  • java中随机数生成方式有哪些

    技术java中随机数生成方式有哪些这篇文章主要介绍了java中随机数生成方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  随机数的产生在一些代码

    攻略 2021年11月23日
  • Springboot自带定时任务实现动态配置Cron参数方式是是什么

    技术Springboot自带定时任务实现动态配置Cron参数方式是是什么这篇文章主要讲解了“Springboot自带定时任务实现动态配置Cron参数方式是是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小

    攻略 2021年11月1日
  • 怎么理解MySQL 5.7中的Generated Column

    技术怎么理解MySQL 5.7中的Generated Column这期内容当中小编将会给大家带来有关怎么理解MySQL 5.7中的Generated Column,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文

    攻略 2021年11月20日
  • 如何理解Solidity的Bytecode和Opcode

    技术如何理解Solidity的Bytecode和Opcode本篇文章为大家展示了如何理解Solidity的Bytecode和Opcode,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收

    攻略 2021年11月23日
  • 抖音刷赞软件-在线刷抖音播放量

    技术抖音刷赞软件-在线刷抖音播放量抖音刷赞软件-在线刷抖音播放量
    行骗者猖獗之外,问题的背面,亦存在“热门造假”的公开秘密。同被套路的大四学生侯明明的心态具备一定代表性,她直言自己放松警惕心的原因:“现在好多热门都是刷的

    测评 2021年11月13日
  • Kerberos命令怎么使用

    技术Kerberos命令怎么使用Kerberos命令怎么使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.登录 kinit admin/admin@

    攻略 2021年11月11日