Reasons and solutions for not being able to detect array changes in Vue2

Reasons and solutions for not being able to detect array changes in Vue2

Due to limitations of JavaScript, Vue cannot detect changes to the following arrays:

  • When setting an array item directly using an index, for example: vm.items[indexOfItem] = newValue
  • When modifying the length of an array, for example: vm.items.length = newLength
var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] = 'x' // not responsive vm.items.length = 2 // not responsive

Workaround

Manually 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.

  • When accessing or setting the value of the corresponding element by index, the getter and setter methods can be triggered
  • Pushing or unshifting will increase the index. Newly added attributes need to be initialized manually before they can be observed.
  • Deleting an element by pop or shift will delete and update the index, and will also trigger the setter and getter methods.

Therefore, Object.defineProperty has the ability to monitor array index changes, but vue2.x has abandoned this feature.

Source code analysis

Object.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.0

In 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:
  • Vue2 responsive system: deep response
  • Nesting of Vue2 responsive system
  • Vue2 responsive system branch switching
  • Introduction to Vue2 Responsive System
  • Vue2 responsive system asynchronous queue
  • Implementation of the vue2.x array hijacking principle
  • Vue2 responsive system array

<<:  Installation and use of mysql on Ubuntu (general version)

>>:  How to store text and pictures in MySQL

Recommend

Tutorial on installing MySQL with Docker and implementing remote connection

Pull the image docker pull mysql View the complet...

Detailed steps for setting up and configuring nis domain services on Centos8

Table of contents Introduction to NIS Network env...

Why Use DOCTYPE HTML

You know that without it, the browser will use qui...

Tutorial on installing jdk1.8 on ubuntu14.04

1. Download jdk download address我下載的是jdk-8u221-li...

Multiple ways to insert SVG into HTML pages

SVG (Scalable Vector Graphics) is an image format...

Detailed explanation of Vue configuration request multiple server solutions

1. Solution 1.1 Describing the interface context-...

Let IE6, IE7, IE8 support CSS3 rounded corners and shadow styles

I want to make a page using CSS3 rounded corners ...

How to deploy hbase using docker

Standalone hbase, let’s talk about it first. Inst...

MySQL trigger detailed explanation and simple example

MySQL trigger simple example grammar CREATE TRIGG...

Docker MQTT installation and use tutorial

Introduction to MQTT MQTT (Message Queuing Teleme...

Common CSS Errors and Solutions

Copy code The code is as follows: Difference betw...

Summary of common operation skills of MySQL database

This article summarizes common operating techniqu...