亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue中數(shù)組與對象修改觸發(fā)頁面更新的機制與原理解析

 更新時間:2022年12月10日 09:26:52   作者:Hello_Yeck  
這篇文章主要介紹了Vue中關于數(shù)組與對象修改觸發(fā)頁面更新的機制與原理簡析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Vue中關于數(shù)組與對象修改觸發(fā)頁面更新的機制與原理簡析

相關問題

數(shù)組

使用索引直接賦值與直接修改數(shù)組length時,不會觸發(fā)頁面更新。

例如:

<script>
export default {
    name: "HomeView",
    data: () => ({
        list1: ["A", "B"],
    }),
    methods: {
        btnClicked() {
            this.list1[0] = "C"
            this.list1[2] = "C"
        },
    },
}
</script>

或是

<script>
export default {
    name: "HomeView",
    data: () => ({
        list1: [{ text: "123" }, { text: "456" }],
    }),
    methods: {
        btnClicked() {
            this.list1[0] = { text: "789" }
        },
    },
}
</script>

頁面并不會觸發(fā)更新。

對象

頁面初始化完成后,在方法中直接對data內(nèi)聲明對象當前不存在的屬性進行賦值來為對象新增屬性時,頁面也不會響應渲染。

例如:

<script>
export default {
    name: "HomeView",
    data: () => ({
        obj1: { a: "a", b: "b" },
    }),
    methods: {
        btnClicked() {
            this.obj1.c = "c"
        },
    },
}
</script>

頁面并不會觸發(fā)更新。

原因

Vue在初始化時會將data內(nèi)所有的屬性嵌套遍歷并重寫其Getter和Setter方法,借此實現(xiàn)響應式屬性。

然而對于在頁面渲染完成后加入data的屬性,Vue并不會將其變?yōu)轫憫健?/p>

一些深入的探究

數(shù)組

Vue對于數(shù)組是僅將其對應下標的對象的屬性變?yōu)轫憫剑@個下標本身是無法成為響應式的。

data: () => ({
        list1: [{ text: "123" }, { text: "456" }],
})

使用如上的data聲明。

方法A:

this.list1[0] = { text: "789" }

方法B:

this.list1[0].text = "789"

方法B可以被正確響應而方法A不可以。

方法A將數(shù)組下標為0的位置替換為了一個新的對象,而因為數(shù)組下標不是響應式的,因此沒有觸發(fā)頁面刷新。

同時,由于數(shù)組下標為0的位置替換為了一個新的對象,而這個新的對象并沒有被配置為響應式,那對于這個對象屬性的修改也不會觸發(fā)頁面更新。如下:

this.list1[0] = { text: "789" }
this.list1[0].text = "456"

由于新的對象的屬性并沒有被配置為響應式,那么即使對這個對象的屬性進行修改,頁面也不會被更新。

既然下標本身無法成為響應式,不妨嘗試:

<script>
export default {
    name: "HomeView",
    data: () => ({
        list1: ["A", "B"],
    }),
    methods: {
        btnClicked() {
            this.list1[0] = "C"
        },
    },
}
</script>

通過下標修改數(shù)組的對應值也無法觸發(fā)視圖更新。

對象

data: () => ({
        obj1: { a: { text: "a" }, b: { text: "b" } },
}),

使用如上的data聲明。

this.obj1.a = { text: "c" }

成功觸發(fā)視圖更新。

與數(shù)組下標不同,對象的屬性在初始化是被定義為響應式的,因此直接對屬性賦值對象是能夠觸發(fā)視圖更新的。不像對數(shù)組的對應下標賦值而不會觸發(fā)視圖更新。

解決方案

數(shù)組

1. 內(nèi)置API

如果需要向數(shù)組加入新的成員,則可以直接使用數(shù)組的push方法。

此外,下列數(shù)組方法也可以自動的觸發(fā)視圖刷新:

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

2. 將數(shù)組重新賦值,修改引用地址

為數(shù)組新增一個字符串成員"C"

this.list1 = this.list1.concat(["C"])

由于list1是data的屬性,list1的引用發(fā)生改變,就會觸發(fā)視圖更新。

修改數(shù)組的第一個值

let tempList = this.list1.concat([]) // 深拷貝,等價于一個新數(shù)組,使用slice,JSON都可以。
tempList[0] = "666"
this.list1 = tempList

通過原數(shù)組新建一個新數(shù)組,修改新數(shù)組后再將新數(shù)組賦值給原數(shù)組,由于原數(shù)組作為data的屬性,其引用被修改,觸發(fā)視圖更新。

3. Vue.$set() 方法

使用Vue.$set可以為data對象添加一個新的響應式屬性,且觸發(fā)視圖更新。

定義:

Vue.$set(對象或數(shù)組, 對象屬性名或數(shù)組下標, 值)

向list1對象的0索引位置賦值一個新的響應式對象,同時觸發(fā)視圖更新:

Vue.$set(this.list1, 0, { text: "789" })

如果在組件中應使用this.$set來代替:

this.$set(this.list1, 0, { text: "789" })

對象

1. 將對象重新賦值,修改引用地址

思路與數(shù)組的類同。

使用JSON、手寫遞歸、lodash深拷貝均可,但如果對象內(nèi)含方法,則不能使用JSON來完成深拷貝。

深拷貝完成后修改對應屬性后賦值給原對象即可。

2. Vue.$set() 方法

對象同樣可以使用$set() 方法修改。

定義:

Vue.$set(對象或數(shù)組, 對象屬性名或數(shù)組下標, 值)

將obj1對象的a屬性賦值為字符串"b"并觸發(fā)視圖更新:

Vue.$set(this.obj1, a, "b")

如果在組件內(nèi),則應使用:

this.$set(this.obj1, a, "b")

到此這篇關于Vue中關于數(shù)組與對象修改觸發(fā)頁面更新的機制與原理簡析的文章就介紹到這了,更多相關Vue數(shù)組與對象修改觸發(fā)頁面更新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue中render函數(shù)調用時機與執(zhí)行細節(jié)源碼分析

    Vue中render函數(shù)調用時機與執(zhí)行細節(jié)源碼分析

    這篇文章主要為大家介紹了Vue中render函數(shù)調用時機與執(zhí)行細節(jié)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • vue 判斷元素內(nèi)容是否超過寬度的方式

    vue 判斷元素內(nèi)容是否超過寬度的方式

    這篇文章主要介紹了vue 判斷元素內(nèi)容是否超過寬度的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue自定義指令合集(超實用!)

    vue自定義指令合集(超實用!)

    Vue自定義指令是Vue中一種非常有用的擴展能力,它允許你在標準的模板語法中使用自定義行為,而不需要編寫新的組件或者混入,這篇文章主要給大家介紹了關于vue自定義指令的相關資料,需要的朋友可以參考下
    2024-03-03
  • vue之prop與$emit的用法說明

    vue之prop與$emit的用法說明

    這篇文章主要介紹了vue之prop與$emit的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解elementui之el-image-viewer(圖片查看器)

    詳解elementui之el-image-viewer(圖片查看器)

    這篇文章主要介紹了詳解elementui之el-image-viewer(圖片查看器),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • 詳解Vue 2中的? initState 狀態(tài)初始化

    詳解Vue 2中的? initState 狀態(tài)初始化

    這篇文章主要介紹了詳解Vue 2中的initState狀態(tài)初始化,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • vue3父子組件通信、兄弟組件實時通信方式

    vue3父子組件通信、兄弟組件實時通信方式

    這篇文章主要介紹了vue3父子組件通信、兄弟組件實時通信方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Element?Table行的動態(tài)合并及數(shù)據(jù)編輯示例

    Element?Table行的動態(tài)合并及數(shù)據(jù)編輯示例

    這篇文章主要為大家介紹了Element?Table行的動態(tài)合并及數(shù)據(jù)編輯示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Vue的移動端多圖上傳插件vue-easy-uploader的示例代碼

    Vue的移動端多圖上傳插件vue-easy-uploader的示例代碼

    這篇文章主要介紹了Vue的移動端多圖上傳插件vue-easy-uploader的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • vue3中封裝axios請求最新實現(xiàn)步驟

    vue3中封裝axios請求最新實現(xiàn)步驟

    這篇文章主要給大家介紹了關于vue3中封裝axios請求的最新實現(xiàn)步驟,在Vue 3中可以通過封裝axios來實現(xiàn)接口的統(tǒng)一管理和調用,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04

最新評論