Vue3 Reactive數組的詳細闡述

一、響應式對象和響應式數組

在Vue3中,響應式對象和響應式數組都是採用函數式API解決了數據的響應式問題。Vue3的reactive()函數可以對對象進行響應式化處理,而reactive()函數內部會判斷傳入的對象是否為數組類型,如果是,則會調用ref()函數將數組轉換為響應式數組,這樣在數組對象進行增加、修改、刪除操作後,即可自動觸發DOM的更新。


  import { reactive } from 'vue'
  const state = reactive({
    arr: [1, 2, 3],
    obj: {
      name: 'Jack',
      age: '18'
    }
  })

上述代碼中的state.arr數組使用了Vue3的reactive()函數進行響應式化處理,接下來可以在Vue組件中進行引用,即可達到監聽狀態改變的目的。

二、響應式數組的常用API

1、push()方法

通過調用數組的push()方法,在末尾添加一個或多個元素,並返回新的數組長度。這時候,因為是使用了Vue3的響應式數組,DOM會自動更新。


  state.arr.push(4)
  // state.arr變成[1, 2, 3, 4]

2、pop()方法

在數組末尾移除最後一個元素,並返回該元素。同樣,因為使用了響應式數組,DOM會自動更新。


  state.arr.pop()
  // state.arr變成[1, 2]

3、shift()方法

在數組開頭移除第一個元素,並返回該元素。同樣,因為使用了響應式數組,DOM會自動更新。


  state.arr.shift()
  // state.arr變成[2, 3]

4、unshift()方法

在數組開頭添加一個或多個元素,並返回新的數組長度。同樣,因為使用了響應式數組,DOM會自動更新。


  state.arr.unshift(0)
  // state.arr變成[0, 1, 2, 3]

5、splice()方法

在指定位置刪除多少個元素並添加新的元素。同樣,因為使用了響應式數組,DOM會自動更新。


  state.arr.splice(1, 2, 5, 6)
  // state.arr變成[1, 5, 6]

6、slice()方法

返回一個新數組,包含從開始到結束(不包括結束)的所有元素。slice()方法不會更改原始數組,只是返回一個新的數組,需要注意的是,slice()方法的第一個參數是開始的索引,第二個參數是結束的索引。同樣,因為使用了響應式數組,DOM會自動更新。


  const newArr = state.arr.slice(1, 2)
  // newArr是[2],state.arr還是[1, 2, 3]

三、響應式數組的高級操作

1、computed屬性

computed屬性可以將一個普通的屬性值轉換成一個計算屬性,只要依賴的數據發生變化,它就會自動更新。此外,computed屬性返回的值要麼是基本類型的值,要麼是一個響應式對象或者數組。在本例中,通過computed屬性獲取響應式數組的長度,只要數組發生變化,computed屬性值就會自動更新。


  import { computed } from 'vue'
  const length = computed(() => state.arr.length)

2、watch()方法

watch()方法可以監聽數組對象中某個屬性的變化,並做出相應的操作,可以為變化的屬性設置一個回調函數。在本例中,當響應式數組發生變化時便會執行該回調函數,並傳遞修改後的數組和修改前的數組。


  watch(
    () => state.arr,
    (newVal, oldVal) => {
      // do something
    }
  )

四、響應式數組的限制

Vue3中的響應式數組雖然操作方便,易於控制,但是仍存在幾個需要注意的點,其中最主要的是:

1、直接更改數組的某一項不會觸發視圖更新

通過索引值直接修改數組中的某一項時,並不能夠觸發視圖的更新,需要手動調用splice()方法來實現更新。這是由於Vue3不能偵測到通過索引值進行修改的操作,需要手動進行觸發。

在Vue2的版本中,使用Vue.set()或者this.$set()的方法可以實現對數組的某一項進行值的更改,但在Vue3中這兩個方法的使用已經被移除,應該使用splice()方法來替代。

2、因為限制更新性能問題,無法觀測數組索引的變化

由於Vue3為了優化性能,不會對數組中的索引進行觀察,因此新增或刪除數組元素時才會觸發視圖更新。如果想要直接更新某一個索引值,需要手動調用splice()方法。

綜上所述,響應式數組操作時需要注意索引直接修改沒有觸發視圖更新、新增刪除元素才能觸發視圖更新等問題,但是這些問題都可以通過手動調用方法進行監控、更新解決,從而達到需要的效果。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246357.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:14
下一篇 2024-12-12 13:14

相關推薦

  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字符串進行格式化處理。 names = [‘A…

    編程 2025-04-29
  • Java創建一個有10萬個元素的數組

    本文將從以下方面對Java創建一個有10萬個元素的數組進行詳細闡述: 一、基本介紹 Java是一種面向對象的編程語言,其強大的數組功能可以支持創建大規模的多維數組以及各種複雜的數據…

    編程 2025-04-28
  • Python數組隨機分組用法介紹

    Python數組隨機分組是一個在數據分析與處理中常用的技術,它可以將一個大的數據集分成若干組,以便於進行處理和分析。本文將從多個方面對Python數組隨機分組進行詳細的闡述,包括使…

    編程 2025-04-28
  • Python數組索引位置用法介紹

    Python是一門多用途的編程語言,它有着非常強大的數據處理能力。數組是其中一個非常重要的數據類型之一。Python支持多種方式來操作數組的索引位置,我們可以從以下幾個方面對Pyt…

    編程 2025-04-28
  • Python語言數組從大到小排序符號的用法介紹

    當我們使用Python進行編程的時候,經常需要對數組進行排序從而使數組更加有序,而數組的排序方式有很多,其中從大到小排序符號是一種常見的排序方式。本文將從多個方面對Python語言…

    編程 2025-04-28
  • Python列錶轉numpy數組

    本文將闡述Python中列表如何轉換成numpy數組。在科學計算和數據分析領域中,numpy數組扮演着重要的角色。Python與numpy的無縫結合使得數據操作更加方便和高效。因此…

    編程 2025-04-27

發表回復

登錄後才能評論