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

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

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

一、數(shù)組

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

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

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

2. 替代做法

(1)修改值

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

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

arr.splice(newLen)

3. 注意

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

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

二、對(duì)象

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

屬性的新增和刪除

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 無(wú)法監(jiān)聽(tīng)數(shù)組和對(duì)象的這些變化的原因

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

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

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

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

2. 對(duì)象

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

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

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

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

關(guān)于vue監(jiān)聽(tīng)的一些問(wèn)題

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

vue通過(guò)object.defineProperty將對(duì)象的key轉(zhuǎn)化成getter/setter的形式來(lái)追蹤變化,但是這種追蹤方式只能追蹤到數(shù)據(jù)的修改,對(duì)象的屬性的刪除和增加,這種形式追蹤不到。為此vue提供可$set 和$delete兩種API來(lái)配合使用,解決監(jiān)聽(tīng)不到屬性新增刪除問(wè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ā)送變化通知;

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

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

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

vue通過(guò)攔截?cái)?shù)組原型的方式實(shí)現(xiàn)數(shù)組的變化的監(jiān)聽(tīng),所以有些不是數(shù)組原型定義的方法進(jìn)行的數(shù)組操作,發(fā)生的變化,是數(shù)組感知不到的,比如通過(guò)數(shù)組下標(biāo)修改對(duì)應(yīng)位置的值(this.list[0] = 2),或者通過(guò)數(shù)組長(zhǎng)度改變數(shù)組(比如通過(guò)數(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ì)教程(完整步驟),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue通過(guò)tailwindcss實(shí)現(xiàn)class動(dòng)態(tài)綁定

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

    這篇文章主要介紹了vue通過(guò)tailwindcss實(shí)現(xiàn)class動(dòng)態(tài)綁定,文中給大家介紹了一些常用類名語(yǔ)法記錄,對(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)來(lái)創(chuàng)建不同的組件模塊,所有事件都在子組件內(nèi)部.怎么實(shí)現(xiàn)這樣一個(gè)功能呢?接下來(lái)跟隨腳本之家小編一起看看吧
    2018-03-03
  • vue項(xiàng)目中使用ts(typescript)入門(mén)教程

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

    最近項(xiàng)目需要將原vue項(xiàng)目結(jié)合ts的使用進(jìn)行改造,本文從安裝到vue組件編寫(xiě)進(jìn)行了說(shuō)明,文中通過(guò)示例代碼介紹的非常詳細(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帶來(lái)了更好的邏輯組織和復(fù)用性,支持TypeScript,提供靈活的響應(yīng)式系統(tǒng),它允許開(kāi)發(fā)者將相關(guān)邏輯組合在一起,通過(guò)composable函數(shù)實(shí)現(xiàn)邏輯復(fù)用,擺脫了mixin的缺點(diǎn),同時(shí),組合式API與TypeScript的集成更緊密,能夠提供更準(zhǔn)確的類型推斷
    2024-10-10
  • Vue組件tree實(shí)現(xiàn)樹(shù)形菜單

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

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

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

    在現(xiàn)代Web開(kāi)發(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)論

类乌齐县| 林口县| 阳谷县| 汝阳县| 喀什市| 夏邑县| 阿勒泰市| 宁国市| 郸城县| 扶绥县| 延庆县| 红桥区| 托克逊县| 丹阳市| 海安县| 邓州市| 九寨沟县| 铜山县| 达尔| 万源市| 会宁县| 渭源县| 平顶山市| 依兰县| 铜川市| 信阳市| 长宁区| 天水市| 湾仔区| 巨野县| 碌曲县| 肥西县| 专栏| 新田县| 慈溪市| 河东区| 长沙县| 穆棱市| 连平县| 囊谦县| 巢湖市|