Home >Web Front-end >Vue.js >A brief analysis of Vue.set and this.$set in Vue and a look at the usage scenarios!

A brief analysis of Vue.set and this.$set in Vue and a look at the usage scenarios!

青灯夜游
青灯夜游forward
2022-03-04 16:41:123056browse

This article will talk about Vue.set and this.$set in Vue, and introduce the usage and usage scenarios of Vue.set and this.$set. I hope it will be helpful to everyone!

A brief analysis of Vue.set and this.$set in Vue and a look at the usage scenarios!

1. Why is Vue.set

Due to JavaScript limitations, Vue cannot detect changes in arrays and objects in data, so it will not trigger View updated. vuejs video tutorial

2. Solution

Array

1. Use the mutation method provided by Vue

A brief analysis of Vue.set and this.$set in Vue and a look at the usage scenarios!

Vue encapsulates these JS array methods, and array updates can be detected through these methods.

2. Replace the entire original array

In the following example, vm.items[1] = 'excess'

<body>
<div id="app">
    <ul>
        <li v-for="(item, index) in items">
            {{ index }} : {{ item }}
        </li>
    </ul>
</div>

<script>
let vm = new Vue({
    el: &#39;#app&#39;,
    data: {
        items: [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
    },
    created() {
        this.items = [&#39;a&#39;, &#39;test&#39;, &#39;c&#39;]
    }
})
</script>
</body>

3. Use Vue.set (see below)


Object

1. Replace the entire original object

In the following example, it is necessary to add a key-value pair {test: 'newthing'} to the object

<body>
<div id="app">
    <ul>
        <li v-for="(value, name) in object">
            {{ name }} : {{ value }}
        </li>
    </ul>
</div>

<script>
let vm = new Vue({
    el: &#39;#app&#39;,
    data: {
        object: {
            title: &#39;How to do lists in Vue&#39;,
            author: &#39;Jane Doe&#39;,
            publishedAt: &#39;2016-04-10&#39;
        }
    },
    created() {
        this.object = {
            title: &#39;How to do lists in Vue&#39;,
            author: &#39;Jane Doe&#39;,
            publishedAt: &#39;2016-04-10&#39;,
            test: &#39;newthing&#39;
        }
    }
})
</script>
</body>

2. Use Vue.set (see below)


3. Vue.set

For arrays

Vue cannot detect changes in the following arrays :

  • When using the index value to directly set an array item, such as vm.list[0]=newValue
  • When modifying the array length, such as vm.list.length=newLength

For example

var vm = new Vue({
  data: {
    items: [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
  }
})
vm.items[1] = &#39;x&#39; // 不是响应性的
vm.items.length = 2 // 不是响应性的

You can use Vue.set or this.$set

Usage method

Vue.set(target,index,newValue)

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// this.$set
vm.$set(vm.items, indexOfItem, newValue)

For object

Vue cannot Detect the addition or removal of properties. Since Vue will perform getter/setter conversion on the property when initializing the instance, the property must exist on the data object for Vue to convert it to reactive.

Give a chestnut

var vm = new Vue({
  data:{
    a:1
  }
})

// `vm.a` 是响应式的

vm.b = 2
// `vm.b` 是非响应式的

Usage method

Vue.set(target,key,value)

Vue.set(vm.someObject, &#39;b&#39;, 2)
this.$set(this.someObject,&#39;b&#39;,2)

Note

Vue does not allow dynamic additionRoot levelResponsive attributes

const app = new Vue({
  data: {
    a: 1
  }
  // render: h => h(Suduko)
}).$mount(&#39;#app1&#39;)

Vue.set(app.data, &#39;b&#39;, 2)

A brief analysis of Vue.set and this.$set in Vue and a look at the usage scenarios!

Only Use the Vue.set(object, propertyName, value) method to add responsive properties to nested objects

var vm=new Vue({
    el:&#39;#test&#39;,
    data:{
        //data中已经存在info根属性
        info:{
            name:&#39;小明&#39;;
        }
    }
});
//给info添加一个性别属性
Vue.set(vm.info,&#39;sex&#39;,&#39;男&#39;);

4. Usage scenarios

When When we modify the array or object in data, some operations are non-responsive. Vue cannot detect data updates, so it will not trigger view updates. At this time, you need to use Vue.set() for responsive data updates.

(Learning video sharing: vuejs tutorial, web front-end)

The above is the detailed content of A brief analysis of Vue.set and this.$set in Vue and a look at the usage scenarios!. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:juejin.cn. If there is any infringement, please contact admin@php.cn delete