欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你了解Vue數(shù)組的變異方法

 更新時(shí)間:2023年06月25日 09:08:57   作者:Cosolar  
Vue框架提供了一些便捷的數(shù)組變異方法,包括push、pop、shift、unshift、splice、sort和reverse等,Vue的數(shù)組變異方法可以自動(dòng)觸發(fā)DOM更新,本文就詳細(xì)帶大家了解一下Vue.js數(shù)組的變異方法

Vue框架提供了一些便捷的數(shù)組變異方法,包括push、pop、shift、unshift、splice、sort和reverse等。在使用Vue開(kāi)發(fā)Web應(yīng)用程序時(shí),經(jīng)常需要對(duì)數(shù)組進(jìn)行操作以實(shí)現(xiàn)相應(yīng)的功能,而使用原生的JavaScript數(shù)組方法時(shí)需要手動(dòng)更新DOM,顯得比較繁瑣。Vue的數(shù)組變異方法可以自動(dòng)觸發(fā)DOM更新,省去了手動(dòng)更新DOM的步驟,使得開(kāi)發(fā)者可以更加高效地操作數(shù)組數(shù)據(jù),提高開(kāi)發(fā)效率和代碼質(zhì)量。因此,了解Vue的數(shù)組變異方法是非常有必要的。

在Vue中,我們可以使用v-for指令來(lái)渲染一個(gè)數(shù)組。例如:

<template>
  <ul>
    <li v-for="item in items" :key="item.id">
      {{ item }}
    </li>
  </ul>
</template>
<script>
export default {
  data() {
    return {
      items: ['Apple', 'Banana', 'Orange']
    }
  }
}
</script>

在上面的例子中,我們使用v-for指令來(lái)渲染一個(gè)名為items的數(shù)組。這個(gè)數(shù)組包含了三個(gè)元素:Apple、Banana和Orange。Vue會(huì)自動(dòng)跟蹤每個(gè)元素的編號(hào),并在每次數(shù)組發(fā)生變化時(shí)更新DOM。

但是,有時(shí)我們需要對(duì)數(shù)組進(jìn)行一些操作,例如添加或刪除元素。這時(shí),我們就需要使用數(shù)組的一些方法,例如push、pop、splice等。但是,這些方法并不會(huì)自動(dòng)觸發(fā)Vue的DOM更新,因此我們必須手動(dòng)調(diào)用Vue的set或者set或者set或者forceUpdate方法來(lái)更新DOM。而Vue提供的變異方法則可以自動(dòng)觸發(fā)DOM更新,省略了這些繁瑣的步驟。

Vue提供的變異方法包括:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

下面我們來(lái)詳細(xì)講解這些方法是如何工作的。

push方法

Vue的push方法與JavaScript原生的push方法相同,它可以向數(shù)組末尾添加一個(gè)或多個(gè)元素。例如:

this.items.push('Pear');

上面的代碼會(huì)向數(shù)組items中添加一個(gè)新元素'Pear'。push方法的返回值是新數(shù)組的長(zhǎng)度。

當(dāng)使用Vue的push方法時(shí),它會(huì)自動(dòng)觸發(fā)DOM更新。這意味著我們不需要手動(dòng)調(diào)用set或者set或者set或者forceUpdate方法來(lái)更新DOM。Vue的push方法會(huì)在更新DOM前調(diào)用數(shù)組的原生push方法,并傳遞相同的參數(shù)。當(dāng)數(shù)組發(fā)生變化時(shí),Vue會(huì)檢測(cè)到變化并更新DOM。

需要注意的是,如果我們向數(shù)組中添加對(duì)象類(lèi)型的元素,那么這個(gè)對(duì)象必須是響應(yīng)式的。否則,這個(gè)對(duì)象的屬性變化時(shí)不會(huì)觸發(fā)DOM更新。為了避免這種情況,我們應(yīng)該在添加對(duì)象前先使用Vue.set或者this.$set方法將其轉(zhuǎn)換為響應(yīng)式對(duì)象。

pop方法

Vue的pop方法與JavaScript原生的pop方法相同,它可以從數(shù)組末尾刪除一個(gè)元素,并返回被刪除的元素。例如:

let lastItem = this.items.pop();

上面的代碼會(huì)從數(shù)組items中刪除最后一個(gè)元素,并返回該元素。當(dāng)使用Vue的pop方法時(shí),它會(huì)自動(dòng)觸發(fā)DOM更新,無(wú)需手動(dòng)調(diào)用set或者set或者set或者forceUpdate方法。

shift方法

Vue的shift方法與JavaScript原生的shift方法相同,它可以從數(shù)組頭部刪除一個(gè)元素,并返回被刪除的元素。例如:

上面的代碼會(huì)從數(shù)組items中刪除第一個(gè)元素,并返回該元素。當(dāng)使用Vue的shift方法時(shí),它會(huì)自動(dòng)觸發(fā)DOM更新,無(wú)需手動(dòng)調(diào)用set或者set或者set或者forceUpdate方法。

unshift方法

Vue的unshift方法與JavaScript原生的unshift方法相同,它可以向數(shù)組頭部添加一個(gè)或多個(gè)元素。例如:

this.items.unshift('Grape');

上面的代碼會(huì)向數(shù)組items頭部添加一個(gè)新元素'Grape'。當(dāng)使用Vue的unshift方法時(shí),它會(huì)自動(dòng)觸發(fā)DOM更新,無(wú)需手動(dòng)調(diào)用set或者set或者set或者forceUpdate方法。

splice方法

Vue的splice方法與JavaScript原生的splice方法相同,它可以在任意位置添加或刪除一個(gè)或多個(gè)元素。例如:

this.items.splice(1, 0, 'Kiwi', 'Mango');

上面的代碼會(huì)從數(shù)組items中的索引1位置開(kāi)始,刪除0個(gè)元素,并添加兩個(gè)新元素Kiwi和Mango。當(dāng)使用Vue的splice方法時(shí),它會(huì)自動(dòng)觸發(fā)DOM更新,無(wú)需手動(dòng)調(diào)用set或者set或者set或者forceUpdate方法。

需要注意的是,如果我們向數(shù)組中添加對(duì)象類(lèi)型的元素,那么這個(gè)對(duì)象必須是響應(yīng)式的。否則,這個(gè)對(duì)象的屬性變化時(shí)不會(huì)觸發(fā)DOM更新。為了避免這種情況,我們應(yīng)該在添加對(duì)象前先使用Vue.set或者this.$set方法將其轉(zhuǎn)換為響應(yīng)式對(duì)象。

sort方法

Vue的sort方法與JavaScript原生的sort方法相同,它可以按照一定規(guī)則對(duì)數(shù)組進(jìn)行排序。例如:

this.items.sort();

上面的代碼會(huì)按照字母順序?qū)?shù)組items進(jìn)行排序。當(dāng)使用Vue的sort方法時(shí),它會(huì)自動(dòng)觸發(fā)DOM更新,無(wú)需手動(dòng)調(diào)用set或者set或者set或者forceUpdate方法。

需要注意的是,如果我們想要按照自定義的規(guī)則對(duì)數(shù)組進(jìn)行排序,那么我們需要傳遞一個(gè)比較函數(shù)作為sort方法的參數(shù)。而這個(gè)比較函數(shù)不能直接修改數(shù)組,否則Vue無(wú)法監(jiān)測(cè)到變化。如果需要修改數(shù)組,我們應(yīng)該使用變異方法。

reverse方法

Vue的reverse方法與JavaScript原生的reverse方法相同,它可以將數(shù)組中的元素逆序排列。例如

this.items.reverse();

上面的代碼會(huì)逆序排列數(shù)組items中的元素。當(dāng)使用Vue的reverse方法時(shí),它會(huì)自動(dòng)觸發(fā)DOM更新,無(wú)需手動(dòng)調(diào)用set或者set或者set或者forceUpdate方法。

源碼分析

Vue的數(shù)組變異方法是在響應(yīng)式系統(tǒng)中實(shí)現(xiàn)的:

  • 依賴(lài)追蹤:當(dāng)我們?cè)L問(wèn)某個(gè)響應(yīng)式對(duì)象的屬性時(shí),Vue會(huì)自動(dòng)追蹤依賴(lài)關(guān)系以便監(jiān)聽(tīng)該屬性的變化。

  • 數(shù)據(jù)劫持:Vue使用Object.defineProperty方法來(lái)將響應(yīng)式對(duì)象的屬性轉(zhuǎn)換為getter和setter,從而實(shí)現(xiàn)數(shù)據(jù)劫持,即當(dāng)屬性發(fā)生改變時(shí)自動(dòng)通知依賴(lài)更新。

  • 觀察者模式:在依賴(lài)追蹤和數(shù)據(jù)劫持的基礎(chǔ)上,Vue通過(guò)觀察者模式實(shí)現(xiàn)了響應(yīng)式系統(tǒng)的更新機(jī)制。當(dāng)響應(yīng)式對(duì)象的屬性發(fā)生改變時(shí),觀察者會(huì)接收到更新通知,然后執(zhí)行相應(yīng)的操作,包括更新視圖等。

  • 數(shù)組變異方法:在響應(yīng)式系統(tǒng)的基礎(chǔ)上,Vue實(shí)現(xiàn)了一些特殊的數(shù)組變異方法,例如push、pop、shift、unshift、splice、sort和reverse等。這些方法能夠自動(dòng)觸發(fā)DOM更新,從而實(shí)現(xiàn)實(shí)時(shí)更新視圖的效果。

Vue提供了一些很方便的數(shù)組變異方法,使得我們可以更加輕松地操作數(shù)組數(shù)據(jù)。這些方法自動(dòng)觸發(fā)DOM更新,無(wú)需手動(dòng)調(diào)用set或者set或者set或者forceUpdate方法。但是需要注意的是,如果我們向數(shù)組中添加對(duì)象類(lèi)型的元素,那么這個(gè)對(duì)象必須是響應(yīng)式的。否則,這個(gè)對(duì)象的屬性變化時(shí)不會(huì)觸發(fā)DOM更新。為了避免這種情況,我們應(yīng)該在添加對(duì)象前先使用Vue.set或者this.$set方法將其轉(zhuǎn)換為響應(yīng)式對(duì)象。

在Vue中,定義了一個(gè)全局函數(shù)def,用來(lái)定義對(duì)象的屬性或方法,其源碼如下:

export function def(obj: Object, key: string, val: any, enumerable?: boolean) {
  Object.defineProperty(obj, key, {
    value: val,
    enumerable: !!enumerable,
    writable: true,
    configurable: true
  });
}

其中,obj表示要定義屬性或方法的對(duì)象,key表示要定義的屬性或方法的名稱(chēng),val表示要定義的屬性或方法的值,enumerable表示該屬性或方法是否可枚舉。該函數(shù)使用Object.defineProperty方法將屬性或方法轉(zhuǎn)換為getter和setter。

在Vue的響應(yīng)式系統(tǒng)中,數(shù)組變異方法都定義在Array.prototype上,例如push、pop、shift、unshift、splice、sortreverse等。這些方法在內(nèi)部調(diào)用了def函數(shù)來(lái)定義數(shù)組的屬性或方法,并使用dep.notify()觸發(fā)依賴(lài)更新:

// 定義數(shù)組變異方法
const arrayProto = Array.prototype;
export const arrayMethods = Object.create(arrayProto);
['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].forEach(function (method) {
  // 緩存原生方法
  const original = arrayProto[method];
  // 調(diào)用數(shù)組變異方法時(shí)會(huì)觸發(fā)依賴(lài)更新
  def(arrayMethods, method, function mutator(...args) {
    const result = original.apply(this, args);
    const ob = this.__ob__;
    let inserted;
    switch (method) {
      case 'push':
      case 'unshift':
        inserted = args;
        break;
      case 'splice':
        inserted = args.slice(2);
        break;
    }
    // 對(duì)新插入的元素進(jìn)行響應(yīng)式處理
    if (inserted) ob.observeArray(inserted);
    ob.dep.notify();
    return result;
  });
});

在上述源碼中,我們首先使用Object.create方法創(chuàng)建了一個(gè)以Array.prototype為原型的新對(duì)象arrayMethods,然后遍歷數(shù)組變異方法并緩存原生方法。

隨后,在調(diào)用數(shù)組變異方法時(shí),會(huì)觸發(fā)依賴(lài)更新,并對(duì)新插入的元素進(jìn)行響應(yīng)式處理。具體來(lái)說(shuō),當(dāng)調(diào)用push、unshiftsplice等方法時(shí),會(huì)將新插入的元素轉(zhuǎn)換為響應(yīng)式對(duì)象,并使用ob.observeArray方法對(duì)其進(jìn)行觀測(cè)。最后,使用ob.dep.notify()方法觸發(fā)依賴(lài)更新,通知組件重新渲染視圖。

通過(guò)這種方式,Vue實(shí)現(xiàn)了高效、方便的數(shù)組操作方法,在處理數(shù)組數(shù)據(jù)時(shí)能夠?qū)崟r(shí)更新DOM,提高了開(kāi)發(fā)效率和代碼質(zhì)量。

以上就是一文帶你了解Vue數(shù)組的變異方法的詳細(xì)內(nèi)容,更多關(guān)于Vue數(shù)組變異的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • npm install卡在“sill idealTree buildDeps“問(wèn)題的兩種解決方法

    npm install卡在“sill idealTree buildDeps“問(wèn)題的兩種解

    本文主要介紹了npm install卡在“sill idealTree buildDeps“問(wèn)題的兩種解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 基于better-scroll 實(shí)現(xiàn)歌詞聯(lián)動(dòng)功能的代碼

    基于better-scroll 實(shí)現(xiàn)歌詞聯(lián)動(dòng)功能的代碼

    BetterScroll 是一款重點(diǎn)解決移動(dòng)端(已支持 PC)各種滾動(dòng)場(chǎng)景需求的插件,BetterScroll 是使用純 JavaScript 實(shí)現(xiàn)的,這意味著它是無(wú)依賴(lài)的。本文基于better-scroll 實(shí)現(xiàn)歌詞聯(lián)動(dòng)功能,感興趣的朋友跟隨小編一起看看吧
    2020-05-05
  • vue 解決異步數(shù)據(jù)更新問(wèn)題

    vue 解決異步數(shù)據(jù)更新問(wèn)題

    今天小編就為大家分享一篇vue 解決異步數(shù)據(jù)更新問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • 基于 Vue.js 2.0 酷炫自適應(yīng)背景視頻登錄頁(yè)面實(shí)現(xiàn)方式

    基于 Vue.js 2.0 酷炫自適應(yīng)背景視頻登錄頁(yè)面實(shí)現(xiàn)方式

    本文講述如何實(shí)現(xiàn)擁有酷炫背景視頻的登錄頁(yè)面,瀏覽器窗口隨意拉伸,背景視頻及前景登錄組件均能完美適配,背景視頻可始終鋪滿窗口,前景組件始終居中,視頻的內(nèi)容始終得到最大限度的保留,可以得到最好的視覺(jué)效果
    2018-01-01
  • 關(guān)于pinia的使用和持久化方式(pinia-plugin-persistedstate)

    關(guān)于pinia的使用和持久化方式(pinia-plugin-persistedstate)

    本文介紹了Pinia的使用方法,包括安裝和配置插件pinia-plugin-persistedstate,以及在項(xiàng)目中創(chuàng)建和使用Store模塊,同時(shí),還講解了Pinia的state、getters和actions的使用,并提供了在uniapp中使用持久化插件的總結(jié)
    2025-02-02
  • vue移動(dòng)端彈框組件的實(shí)例

    vue移動(dòng)端彈框組件的實(shí)例

    今天小編就為大家分享一篇vue移動(dòng)端彈框組件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Element-plus使用中遇到的問(wèn)題小結(jié)

    Element-plus使用中遇到的問(wèn)題小結(jié)

    表格數(shù)據(jù)是websocket通信獲取的數(shù)據(jù),首次獲取20條數(shù)據(jù),以后新增訂閱獲取一條,新增一條則向上滑動(dòng)顯示最新數(shù)據(jù),本文給大家介紹Element-plus使用中遇到的問(wèn)題小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 詳解Vue中使用插槽(slot)、聚類(lèi)插槽

    詳解Vue中使用插槽(slot)、聚類(lèi)插槽

    這篇文章主要介紹了Vue中使用插槽(slot)、聚類(lèi)插槽,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue實(shí)現(xiàn)拖拽窗口功能

    vue實(shí)現(xiàn)拖拽窗口功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)拖拽窗口功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 在vue3.0中封裝button使用slot組件

    在vue3.0中封裝button使用slot組件

    這篇文章主要介紹了在vue3.0中封裝button使用slot組件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論