Due to limitations of JavaScript, Vue cannot detect changes to the following arrays:
var vm = new Vue({ data: { items: ['a', 'b', 'c'] } }) vm.items[1] = 'x' // not responsive vm.items.length = 2 // not responsive WorkaroundManually add monitoring // Vue.set Vue.set(vm.items, indexOfItem, newValue) vm.$set(vm.items, indexOfItem, newValue) Use the array mutation method, because Vue implements responsiveness for array mutation methods // Array.prototype.splice vm.items.splice(indexOfItem, 1, newValue) Why can't I monitor changes in the two arrays in Vue2.0?The official documentation briefly summarizes these two points as being impossible to implement "due to JavaScript limitations", and Object.defineProperty is a solution for detecting data changes. Does this limitation refer to Object.defineProperty? In fact, the reason is not because of the vulnerability in Object.defineProperty(), but because of performance considerations. The performance of Object.defineProperty in an array is the same as that in an object. The index of the array can be regarded as the key in the object.
Therefore, Object.defineProperty has the ability to monitor array index changes, but vue2.x has abandoned this feature. Source code analysisObject.property can detect operations that change arrays through indexes, but Vue does not implement this. Then let's look at the source code: Vue 3.0In Vue 3.0, proxy is used instead of Object.defineProperty() to solve the existing problems. The above is the detailed content of the reasons why array changes cannot be detected in Vue2 and the solution. For more information about Vue2 array changes, please pay attention to other related articles on 123WORDPRESS.COM! You may also be interested in:
|
<<: Installation and use of mysql on Ubuntu (general version)
>>: How to store text and pictures in MySQL
1. Make a repo file Refer to the official install...
1. Overview The Promise object is a specification...
Table of contents First install wget View Help Ma...
Table of contents 1. What is syntactic sugar? 2. ...
In MySQL, database garbled characters can general...
Achieve results html <h2>CSS3 Timeline</...
I don't know if you have noticed when making a...
Create a database Right click - Create a new data...
Table of contents Install mockjs in your project ...
Canvas is a new tag in HTML5. You can use js to o...
Table of contents 1. Create a stored function 2. ...
Table of contents Preface: System Requirements: I...
Table of contents utils: Use in vue: explain: Ima...
I knew before that to synchronously obtain the re...
Preface The default database file of the MySQL da...