美文网首页
Vue.set()和this.$set()区别

Vue.set()和this.$set()区别

作者: 匆匆那年_海 | 来源:发表于2020-10-30 17:42 被阅读0次

Vue.set()的源码
import { set } from '../observer/index'
...
Vue.set = set
this.$set()的源码:
import { set } from '../observer/index'
Vue.prototype.$set = set
都用的是set方法 set(target、key、val);,区别在于Vue.set()是将set函数绑定在Vue的构造函数上,this.$set()是将set函数挂载在Vue原型上。

源码分析
1.如果当前环境不是生产环境并且 等于undefined或者null 或 target的数据类型是string、number、symbol、boolean中的一种,那么就抛出错误警告。
2.如果key本来就是对象中的一个属性,并且key不是Object原型上的属性。说明这个key本来就在对象上面已经定义过了的,直接修改值就可以了,可以自动触发响应
target为数组 数组的长度设置为target.length和key中的最大值 防止越界
defineReactive(ob.value, key, val)
ob.dep.notify()
return val
3.defineReactive(ob.value, key, val)的意思是给新加的属性添加依赖,以后再直接修改这个新的属性的时候就会触发页面渲染。 ob.dep.notify()这句代码的意思是触发当前的依赖,所以页面就会进行重新渲染

<template>
    <div class="about">
        <div>{{arr[0]}}</div>
        <div>{{obj.c}}</div>
        <button @click="changeObj">修改对象</button>
    </div>
</template>
<script>
    
    export default {
        name: 'about',
        data() {
            return {
                arr:[1],
                obj: {
                    a: 1,
                    b: 2
                }
            }
        },
        methods: {
            changeObj() {
                // this.arr[0]=2;视图不更新
                this.$set(this.arr, 0, 2);
                // this.obj.c = 999;  视图不更新
                this.$set(this.obj, 'c', 999);
            }
        }
    }
</script>

相关文章

  • Vue.set()和this.$set()区别

    Vue.set()的源码import { set } from '../observer/index'...Vue...

  • vue强制更新

    使用update this.$forceUpdate(),强制视图更新 用vue.set this.$set(th...

  • Vue.set()和this.$set()

    在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新...

  • Vue.set() 和this.$set()

    这两个方法其实是差不多的,可以说几乎是一样的,只不过set是绑定在Vue构造函数上,$set()是绑定在Vue原型...

  • Vue.set和Vue数据监测

    Vue.set this.$set(this.student,'添加的属性','添加的属性值') Vue数据监测 ...

  • Vue.set()实现数据动态响应

    this.$set()和Vue.set()本质方法一样,前者可以用在methods中使用。 在vue里面,我们操作...

  • Vue.set()实现数据动态响应!!!

    this.$set()和Vue.set()本质方法一样,前者可以用在methods中使用。 在vue里面,我们操作...

  • 深入理解Vue的数据响应式

    【目录】一、Vue对data做了什么?二、数据响应式三、Vue.set和this.$set 【正文】在学习Vue的...

  • vue.set/this.$set

    vue项目中,几个表格分开展示,但是展示的内容都一样(不展示的内容有区别),为了省事儿,就给封装了个子组件,但是在...

  • Vue.set()和this.$set()介绍

    在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新...

网友评论

      本文标题:Vue.set()和this.$set()区别

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