Vue的数据响应式

作者: 浪味仙儿啊 | 来源:发表于2020-02-06 23:50 被阅读0次

什么是响应式

当一个物体对外界的变化做出反应就叫响应式的,如“我打你一拳,你会喊疼”。

Vue的数据响应式

就是对数据做出改变时,视图上也会做出相应的变化。

举个例子

const vm = new Vue({
    el:'#app',
    data:{
        name: 'Luna'
    }
})

根据以上代码,页面上对应位置会显示Luna,如执行vm.name='Pola',则会由Luna变成Pola。

但这是正常情况,还有些变态情况

  • 当data为空对象时,Vue会给出警告,例如。
new Vue({
  data: {},
  template: `
    <div>{{n}}</div>
  `
}).$mount("#app");
警告
  • 当data为a,却要在页面中显示b,因为Vue只检查第一层,可以消除警告,但不会将它转换为响应式的
new Vue({
  data: {
    obj: {
      a: 0 // obj.a 会被 Vue 监听 & 代理
    }
  },
  template: `
    <div>
      {{obj.b}}
      <button @click="setB">set b</button>
    </div>
  `,
  methods: {
    setB() {
      this.obj.b = 1; 
    }
  }
}).$mount("#app");

此时点击 set b,视图中不会显示1,因为Vue没法监听一开始不存在的obj.b


image.png

解决方法
1、提前把key声明好,哪怕是空值。

new Vue({
  data: {
    obj: {
      a: 0 // obj.a 会被 Vue 监听 & 代理
      b: undefined
    }
  },
  template: `
    <div>
      {{obj.b}}
      <button @click="setB">set b</button>
    </div>
  `,
  methods: {
    setB() {
      this.obj.b = 1; 
    }
  }
}).$mount("#app");

这是再点击set b就会显示1


image.png

2、使用Vue.set或this.$set

new Vue({
  data: {
    obj: {
      a: 0 // obj.a 会被 Vue 监听 & 代理
      b: undefined
    }
  },
  template: `
    <div>
      {{obj.b}}
      <button @click="setB">set b</button>
    </div>
  `,
  methods: {
    setB() {
      Vue.set(this.obj,'b',1); //也可以这么写this.$set(this.obj,'b',1)
    }
  }
}).$mount("#app");

但是!

当data中有数组怎么办,如果数组长度一直增加,就没有办法提前把key都声明出来,每次改数组,都要用Vue.set或this.$set也很麻烦。

可以直接使用变异方法中的push

new Vue({
  data: {
    array: ["a", "b", "c"]
  },
  template: `
    <div>
      {{array}}
      <button @click="setD">set d</button>
    </div>
  `,
  methods: {
    setD() {
      this.array.push("d");
    }
  }
}).$mount("#app");

尤雨溪篡改了数组的7个API,调用后会更新UI,可参考文档中[变异方法](https://cn.vuejs.org/v2/guide/list.html#%E5%8F%98%E5%BC%82%E6%96%B9%E6%B3%95-mutation-method
)章节。

image.png

相关文章

  • 前端面试题【Day02】

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

  • 2020-12-25

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

  • Vue的响应式浅析

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

  • Vue源码03-响应式原理

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

  • 学习vue的响应式 mvvm -01 数据响应式

    理解VUE的设计思想:VUE的核心是MVVM MVVM框架的三要素:数据响应式 模板引擎以及渲染 数据响应式:监听...

  • Vue数据响应式

    1.什么是数据响应式 在 Vue 中,当 data 中的数据发生改变时,视图会进行更新,这就是Vue数据响应式的概...

  • 深入理解Vue数据响应式

    Vue数据响应式主要研究的是 Vue 构造选项中 data 属性的特性 深入响应式 官方文档 网址: https:...

  • VUE中数据响应式原理

    1.vue数据响应式的原理2.数据属性的四大特性3.访问器属性4.getter和setter vue数据响应式主要...

  • 双向绑定

    数据响应式原理 vue实现数据响应式的原理就是利用了Object.defineProperty(),重新定义了对象...

  • Vue 数据响应式原理

    前言 Vue.js 的核心包括一套“响应式系统”。 “响应式”,是指当数据改变后,Vue 会通知到使用该数据的代码...

网友评论

    本文标题:Vue的数据响应式

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