Home > Web Front-end > Vue.js > body text

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

青灯夜游
Release: 2022-03-04 19:48:39
forward
3009 people have browsed it

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>
Copy after login

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>
Copy after login

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 // 不是响应性的
Copy after login

You can use Vue.set or this.$set

Usage method

Vue.set(target,index,newValue)

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

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` 是非响应式的
Copy after login

Usage method

Vue.set(target,key,value)

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

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)
Copy after login

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;);
Copy after login

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!

Related labels:
vue
source:juejin.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template