最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue2中無法監(jiān)聽數(shù)組和對(duì)象的某些變化問題

 更新時(shí)間:2022年08月24日 09:13:26   作者:Evavava啊  
這篇文章主要介紹了Vue2中無法監(jiān)聽數(shù)組和對(duì)象的某些變化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、數(shù)組

1. 不能監(jiān)聽的情況

(1) 直接通過下標(biāo)賦值  arr[i] = value

(2) 直接修改數(shù)組長度 arr.length = newLen

2. 替代做法

(1)修改值

Vue.set(arr, index, newvalue)
vm.$set(arr, index, newvalue)
arr.splice(index, 1, newvalue)

(2) 修改數(shù)組長度,

arr.splice(newLen)

3. 注意

調(diào)用數(shù)組的pop、push、shift、unshift、splice、sort、reverse等方法時(shí)是可以監(jiān)聽到數(shù)組的變化的

vue內(nèi)部相當(dāng)于重寫了數(shù)組的原型,劫持了這七個(gè)方法

二、對(duì)象

1. 不能監(jiān)聽的情況

屬性的新增和刪除

obj.newkey=newvalue
delete obj.key

2. 替代做法

// 新增
 Vue.set(obj, newkey, newvalue)
 vm.$set(obj, newkey, newvalue)
 obj = Object.assign({}, obj, {newkey1: newvalue1, newkey2: newvalue2})
// 刪除
 Vue.delete(obj, key)
 vm.$delete(obj, key)

三、分析 vue 2 無法監(jiān)聽數(shù)組和對(duì)象的這些變化的原因

首先,vue2是通過Object.defineProperty(obj, key, value)這種方式監(jiān)聽數(shù)據(jù)的

1. 對(duì)于數(shù)組

Object.defineProperty()是可以對(duì)數(shù)組實(shí)現(xiàn)監(jiān)聽操作的,但是vue并沒有實(shí)現(xiàn)這個(gè)功能,因?yàn)閿?shù)組長度不定而且數(shù)據(jù)可能會(huì)很多,如果對(duì)每一個(gè)數(shù)據(jù)都實(shí)現(xiàn)監(jiān)聽,性能代價(jià)太大

但是注意:數(shù)組中的元素是引用類型時(shí)是會(huì)被監(jiān)聽的

2. 對(duì)象

Object.defineProperty()針對(duì)的是對(duì)象的某個(gè)屬性,而且這個(gè)操作在vue的初始化階段就完成了,所以新增的屬性無法監(jiān)聽,通過set方法新增對(duì)象就相當(dāng)于初始化階段的數(shù)據(jù)響應(yīng)式處理

四、vue 3響應(yīng)式原理

vue 3是通過proxy直接代理整個(gè)對(duì)象來實(shí)現(xiàn)的,而不是像Object.defineProperty針對(duì)某個(gè)屬性。

所以,只需做一層代理就可以監(jiān)聽同級(jí)結(jié)構(gòu)下的所有屬性變化,包括新增屬性和刪除屬性

關(guān)于vue監(jiān)聽的一些問題

對(duì)象的監(jiān)聽

vue通過object.defineProperty將對(duì)象的key轉(zhuǎn)化成getter/setter的形式來追蹤變化,但是這種追蹤方式只能追蹤到數(shù)據(jù)的修改,對(duì)象的屬性的刪除和增加,這種形式追蹤不到。為此vue提供可$set 和$delete兩種API來配合使用,解決監(jiān)聽不到屬性新增刪除問題。

*需要特別注意,在使用$set時(shí),需要傳遞的參數(shù)有三個(gè) vm.$set(target,key,value),target不能是Vue.js實(shí)例或者vue.js實(shí)例的根數(shù)據(jù)對(duì)象,所謂的根數(shù)據(jù)對(duì)象是指vm.$data *

*在使用$delete時(shí)候,也可以中另外一種方法實(shí)現(xiàn),但是不太推薦:

?delete this.obj.name;
?this.obg._ob_.dep.notify ?//手動(dòng)向依賴發(fā)送變化通知;

 (說明: _ob_ 是 vue中是否是響應(yīng)式的判斷依據(jù))*

 在使用$delete時(shí)候,target不能是Vue.js實(shí)例或者vue.js實(shí)例的根數(shù)據(jù)對(duì)象,

數(shù)組的監(jiān)聽

vue通過攔截?cái)?shù)組原型的方式實(shí)現(xiàn)數(shù)組的變化的監(jiān)聽,所以有些不是數(shù)組原型定義的方法進(jìn)行的數(shù)組操作,發(fā)生的變化,是數(shù)組感知不到的,比如通過數(shù)組下標(biāo)修改對(duì)應(yīng)位置的值(this.list[0] = 2),或者通過數(shù)組長度改變數(shù)組(比如通過數(shù)組length清空數(shù)組的操作: this.list.length = 0 )。

所以進(jìn)行數(shù)組操作的時(shí)候,盡量使用數(shù)組原型方法操作:

push pop unshift shift concat reverse sort slice splice join?

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • mpvue+vuex搭建小程序詳細(xì)教程(完整步驟)

    mpvue+vuex搭建小程序詳細(xì)教程(完整步驟)

    這篇文章主要介紹了mpvue+vuex搭建小程序詳細(xì)教程(完整步驟),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • vue通過tailwindcss實(shí)現(xiàn)class動(dòng)態(tài)綁定

    vue通過tailwindcss實(shí)現(xiàn)class動(dòng)態(tài)綁定

    這篇文章主要介紹了vue通過tailwindcss實(shí)現(xiàn)class動(dòng)態(tài)綁定,文中給大家介紹了一些常用類名語法記錄,對(duì)vue動(dòng)態(tài)綁定class相關(guān)知識(shí)感興趣的朋友一起看看吧
    2023-07-07
  • vue 父組件調(diào)用子組件方法及事件

    vue 父組件調(diào)用子組件方法及事件

    這篇文章主要介紹了vue 父組件調(diào)用子組件方法及事件的相關(guān)資料,父組件傳入數(shù)組子組件循環(huán)來創(chuàng)建不同的組件模塊,所有事件都在子組件內(nèi)部.怎么實(shí)現(xiàn)這樣一個(gè)功能呢?接下來跟隨腳本之家小編一起看看吧
    2018-03-03
  • vue項(xiàng)目中使用ts(typescript)入門教程

    vue項(xiàng)目中使用ts(typescript)入門教程

    最近項(xiàng)目需要將原vue項(xiàng)目結(jié)合ts的使用進(jìn)行改造,本文從安裝到vue組件編寫進(jìn)行了說明,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 使用Vant如何完成各種Toast提示框

    使用Vant如何完成各種Toast提示框

    這篇文章主要介紹了使用Vant如何完成各種Toast提示框,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue實(shí)現(xiàn)雙向滑動(dòng)輸入條

    Vue實(shí)現(xiàn)雙向滑動(dòng)輸入條

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)雙向滑動(dòng)輸入條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 深入理解Vue3組合式API的實(shí)現(xiàn)

    深入理解Vue3組合式API的實(shí)現(xiàn)

    組合式API為Vue3帶來了更好的邏輯組織和復(fù)用性,支持TypeScript,提供靈活的響應(yīng)式系統(tǒng),它允許開發(fā)者將相關(guān)邏輯組合在一起,通過composable函數(shù)實(shí)現(xiàn)邏輯復(fù)用,擺脫了mixin的缺點(diǎn),同時(shí),組合式API與TypeScript的集成更緊密,能夠提供更準(zhǔn)確的類型推斷
    2024-10-10
  • Vue組件tree實(shí)現(xiàn)樹形菜單

    Vue組件tree實(shí)現(xiàn)樹形菜單

    這篇文章主要為大家詳細(xì)介紹了Vue組件tree實(shí)現(xiàn)樹形菜單,小巧實(shí)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vue.js處理API請(qǐng)求失敗的最佳實(shí)踐和策略

    Vue.js處理API請(qǐng)求失敗的最佳實(shí)踐和策略

    在現(xiàn)代Web開發(fā)中,與后端API的交互是不可避免的,然而,網(wǎng)絡(luò)請(qǐng)求是不穩(wěn)定的,可能會(huì)因?yàn)楦鞣N原因失敗,因此,優(yōu)雅地處理API請(qǐng)求失敗的情況是提升用戶體驗(yàn)和應(yīng)用穩(wěn)定性的關(guān)鍵,本文將詳細(xì)介紹在Vue.js中處理API請(qǐng)求失敗的最佳實(shí)踐和策略,需要的朋友可以參考下
    2024-12-12
  • Vue的自定義事件之組件通信工具詳解

    Vue的自定義事件之組件通信工具詳解

    這篇文章主要介紹了Vue的自定義事件之組件通信工具詳解,Vue的自定義事件(Custom Events)是一種強(qiáng)大的工具,用于實(shí)現(xiàn)組件之間的通信和數(shù)據(jù)傳遞,本文將深入探討什么是Vue的自定義事件,以及如何自定義和使用它們,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

交城县| 河东区| 临桂县| 天峻县| 东丰县| 德惠市| 洛阳市| 郴州市| 南宁市| 峡江县| 西峡县| 当涂县| 九江市| 桃源县| 威海市| 深圳市| 华安县| 仁寿县| 象山县| 邵阳县| 盘锦市| 赤水市| 闽侯县| 五台县| 雅安市| 唐海县| 重庆市| 黑龙江省| 桃江县| 大新县| 新源县| 高唐县| 呼图壁县| 美姑县| 张家川| 太和县| 台北县| 休宁县| 吉木萨尔县| 南雄市| 左贡县|