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

vue3選項(xiàng)式api如何監(jiān)控?cái)?shù)組變化

 更新時(shí)間:2024年06月07日 08:59:52   作者:loggers_kid  
這篇文章主要介紹了vue3選項(xiàng)式api如何監(jiān)控?cái)?shù)組變化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1、vue3數(shù)組監(jiān)控的問(wèn)題

vue3中使用監(jiān)控器 watch 能夠完成一些基本類型數(shù)據(jù)的監(jiān)控,但是如果碰到復(fù)雜類型的數(shù)據(jù),除了直接給變量的賦值操作,元素的添加和改變(包括長(zhǎng)度變化)普通watch是監(jiān)控不到的。

這里的復(fù)雜類型包括對(duì)象和數(shù)組。

使用 vue3給出一個(gè)示例程序:

<template>
	<div>
		<div><button @click="change">按鈕1</button></div>
        <div><button @click="change2">按鈕2</button></div>
	</div>
</template>
 
<script>
	export default{
		data() {
			return {
				msg1: 1,
				msg2: "test",
				msg3: ["Tom","Jerry","Spiker"],
				msg4: {a: "你好"}
			}
		},
		methods: {
			change(){
				this.msg1 += 1
				this.msg2 += 1
				this.msg3.push("Rose")
				this.msg4.b = "你也好"
			},
            change2(){
				this.msg3 = ["Tom and Jerry"]
				this.msg4 = {a: "你也好!"}
			}
		},
		watch: {
			msg1 (newValue, oldValue) {
				console.log("msg1 change")
			},
			msg2 (newValue, oldValue) {
				console.log("msg2 change")
			},
			msg3 (newValue, oldValue) {
				console.log("msg3 change")
			},
			msg4 (newValue, oldValue) {
				console.log("msg4 change")
			}
		}
	}
</script>
 
<style>
</style>

點(diǎn)擊按鈕1,程序的打印結(jié)果為:

說(shuō)明 msg3和 msg4變量的元素添加確實(shí)沒(méi)有監(jiān)聽(tīng)到。

點(diǎn)擊按鈕2,程序打印結(jié)果為:

說(shuō)明數(shù)組和對(duì)象的直接賦值操作是可以被 watch 監(jiān)聽(tīng)到的。

那么為什么普通 watch 沒(méi)有提供對(duì)數(shù)組和對(duì)象的元素變化的監(jiān)聽(tīng)呢? 問(wèn)題原文。簡(jiǎn)而言之就是將基本類型的數(shù)據(jù)和復(fù)雜類型的數(shù)據(jù)做了區(qū)分,以避免復(fù)雜數(shù)據(jù)對(duì)于性能的損耗(個(gè)人理解)。

2、解決方案

2.1 vue版本

網(wǎng)上有些文章給出的解決辦法是通過(guò) this.$set() 來(lái)指定數(shù)組下標(biāo)元素的變化,那么這樣就可以直接使用 watch 來(lái)進(jìn)行監(jiān)聽(tīng)。但是沒(méi)有寫清楚,這是vue2的解決辦法(也可能那些博主在寫那些文章時(shí)vue3還沒(méi)有發(fā)布)。

總之,vue3響應(yīng)式數(shù)據(jù)的實(shí)現(xiàn)方法是和vue2不同的。比如上面的代碼,如果是vue2的話,是可以實(shí)現(xiàn) arr.push() 方法的監(jiān)控,但是下標(biāo)元素的改變,比如 arr[ index] = item 是實(shí)現(xiàn)不了的,所以需要監(jiān)控的數(shù)組變量使用 this.$set() 來(lái)改變下標(biāo)元素才能被 watch 監(jiān)控到。

這篇文章只給出功能描述和寫法,想弄清楚這種差別原因的需要去研究 vue2和vue3響應(yīng)式實(shí)現(xiàn)原理的不同。喜歡的同學(xué)可以去研究一下源碼。

2.2 vue3選項(xiàng)式api深度監(jiān)控的寫法

vue3的數(shù)據(jù)響應(yīng)是基于代理 proxy,所以取消了 this.$set()的使用,但是引入深度監(jiān)控的寫法。所以 vue3可以通過(guò) watch的深度監(jiān)控來(lái)實(shí)現(xiàn)數(shù)組和對(duì)象變化的響應(yīng)。

這里修改一下上面的代碼,將 msg3和 msg4的監(jiān)控器改成:

msg3: {
	deep: true,
	handler(newValue, oldValue) {
		console.log("msg3 change")
	}
},
msg4 : {
	deep: true,
	handler(newValue, oldValue) {
		console.log("msg4 change")
    }
}

重新點(diǎn)擊一下按鈕1 ,打印結(jié)果變成:

實(shí)現(xiàn)了對(duì)于數(shù)組和對(duì)象的內(nèi)容元素監(jiān)控。

3、結(jié)論

vue3要實(shí)現(xiàn)數(shù)組監(jiān)控的話,可以使用深度監(jiān)控來(lái)實(shí)現(xiàn)。

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

相關(guān)文章

  • Vue數(shù)組的劫持逐步分析講解

    Vue數(shù)組的劫持逐步分析講解

    小編這次要給大家分享的是如何實(shí)現(xiàn)vue2.x數(shù)組劫持,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲
    2023-01-01
  • vue3.0路由自動(dòng)導(dǎo)入的方法實(shí)例

    vue3.0路由自動(dòng)導(dǎo)入的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于vue3.0路由自動(dòng)導(dǎo)入的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • vue?組件通信的多種方式

    vue?組件通信的多種方式

    這篇文章主要介紹了vue?組件通信的幾種方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • vue form 表單提交后刷新頁(yè)面的方法

    vue form 表單提交后刷新頁(yè)面的方法

    今天小編就為大家分享一篇vue form 表單提交后刷新頁(yè)面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 使用vscode快速建立vue模板過(guò)程詳解

    使用vscode快速建立vue模板過(guò)程詳解

    這篇文章主要介紹了使用vscode快速建立vue模板過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Vue實(shí)現(xiàn)不同用戶權(quán)限的方法詳解

    Vue實(shí)現(xiàn)不同用戶權(quán)限的方法詳解

    在項(xiàng)目中,實(shí)現(xiàn)不同用戶的權(quán)限控制是常見(jiàn)的需求也是常見(jiàn)的功能模塊,本文將以 vue 為主要的代碼框架介紹幾種常見(jiàn)的權(quán)限控制方式,有需要的可以了解下
    2025-03-03
  • 學(xué)習(xí)Vite的原理

    學(xué)習(xí)Vite的原理

    這篇文章主要介紹了Vite的原理,Vite是一個(gè)更輕、更快的web應(yīng)用開(kāi)發(fā)工具,面向現(xiàn)代瀏覽,Vite創(chuàng)建的項(xiàng)目是一個(gè)普通的Vue3應(yīng)用,相比基于Vue-cli創(chuàng)建的應(yīng)用少了很多配置文件和依賴,下面基于Vite相關(guān)資料內(nèi)容,需要的朋友可以參考一下
    2022-02-02
  • 深入淺析vue-cli@3.0 使用及配置說(shuō)明

    深入淺析vue-cli@3.0 使用及配置說(shuō)明

    這篇文章主要介紹了vue-cli@3.0 使用及配置說(shuō)明,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • vue中axios的封裝問(wèn)題(簡(jiǎn)易版攔截,get,post)

    vue中axios的封裝問(wèn)題(簡(jiǎn)易版攔截,get,post)

    這篇文章主要介紹了vue中axios的封裝問(wèn)題(簡(jiǎn)易版攔截,get,post),需要的朋友可以參考下
    2018-06-06
  • Vue中@click.native的使用方法及場(chǎng)景

    Vue中@click.native的使用方法及場(chǎng)景

    在組件中時(shí)常看到@click.native,在項(xiàng)目中遇到后,簡(jiǎn)單介紹下,這篇文章主要給大家介紹了關(guān)于Vue中@click.native的使用方法及場(chǎng)景的相關(guān)資料,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

五指山市| 梓潼县| 怀集县| 铜鼓县| 梁山县| 日土县| 广州市| 通州市| 凉城县| 西充县| 西藏| 昆明市| 南漳县| 平阳县| 迁西县| 聊城市| 石嘴山市| 沙田区| 平度市| 青海省| 安达市| 涟源市| 延边| 新沂市| 无极县| 五原县| 双城市| 莆田市| 长泰县| 城步| 石棉县| 江永县| 珠海市| 分宜县| 富宁县| 南部县| 宝山区| 雅安市| 寻甸| 南召县| 龙江县|