Vue中watch監(jiān)聽(tīng)首次不生效的解決辦法
引言
在 Vue 中,watch 屬性用于觀察和響應(yīng) Vue 實(shí)例上數(shù)據(jù)的變動(dòng)。然而,默認(rèn)情況下,watch 確實(shí)不會(huì)觸發(fā)組件創(chuàng)建時(shí)(即數(shù)據(jù)初始化時(shí))的變動(dòng),因?yàn)樗饕O(shè)計(jì)用來(lái)監(jiān)聽(tīng)數(shù)據(jù)變化后的響應(yīng)。如果你希望在組件創(chuàng)建時(shí)(即數(shù)據(jù)初始化后)也能執(zhí)行某些操作,你需要采用一些額外的方法。
這里有幾種方式可以處理或繞過(guò)這個(gè)問(wèn)題:
1. 使用 immediate: true
在 Vue 2.x 中,你可以在 watch
的選項(xiàng)中設(shè)置 immediate: true
,這樣 watch
會(huì)在初始化時(shí)立即以當(dāng)前的值觸發(fā)回調(diào),而不僅僅是后續(xù)變化時(shí)。
watch: { someData(newVal, oldVal) { // 當(dāng) someData 發(fā)生變化時(shí)執(zhí)行的邏輯 // 設(shè)置 immediate: true 后,初始化時(shí)也會(huì)執(zhí)行 }, immediate: true, // 注意:這種寫(xiě)法是錯(cuò)誤的 // 正確的寫(xiě)法是將其作為 watch 選項(xiàng)的一部分 someData: { handler(newVal, oldVal) { // 當(dāng) someData 變化時(shí)執(zhí)行的邏輯 }, immediate: true, // 正確設(shè)置 deep: true // 如果需要深度監(jiān)聽(tīng)對(duì)象內(nèi)部的變化 } }
2. 在 created 或 mounted 鉤子中執(zhí)行
如果你只需要在組件創(chuàng)建或掛載時(shí)執(zhí)行某些邏輯(基于初始數(shù)據(jù)),你可以直接在 created
或 mounted
生命周期鉤子中執(zhí)行這些邏輯,而不是使用 watch
。
created() { // 組件創(chuàng)建完成后立即執(zhí)行的邏輯 this.doSomethingWithInitialData(this.someData); }, methods: { doSomethingWithInitialData(data) { // 使用初始數(shù)據(jù)的邏輯 } }
3. 使用 computed 屬性
有時(shí),使用 computed
屬性而不是 watch
可以更優(yōu)雅地解決問(wèn)題。computed
屬性基于它們的依賴(lài)進(jìn)行緩存,并且只有在相關(guān)依賴(lài)發(fā)生改變時(shí)才會(huì)重新求值。你可以通過(guò) computed
來(lái)派生一些數(shù)據(jù),并在需要時(shí)訪問(wèn)這些派生數(shù)據(jù)。
computed: { derivedData() { // 基于 someData 派生新數(shù)據(jù) return this.someData.processedValue; } }
總結(jié)
- 如果需要在數(shù)據(jù)初始化時(shí)也執(zhí)行邏輯,考慮使用
watch
的immediate: true
選項(xiàng)。 - 如果邏輯只與組件的初始化狀態(tài)有關(guān),考慮使用
created
或mounted
生命周期鉤子。 - 使用
computed
屬性來(lái)處理基于響應(yīng)式數(shù)據(jù)的派生數(shù)據(jù)。
到此這篇關(guān)于Vue中watch監(jiān)聽(tīng)首次不生效的解決辦法的文章就介紹到這了,更多相關(guān)Vue watch監(jiān)聽(tīng)首次不生效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vuex頁(yè)面刷新數(shù)據(jù)丟失解決方法詳解
這篇文章主要為大家介紹了vuex頁(yè)面刷新數(shù)據(jù)丟失解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Vue3?PC端頁(yè)面開(kāi)發(fā)規(guī)范及說(shuō)明
這篇文章主要介紹了Vue3?PC端頁(yè)面開(kāi)發(fā)規(guī)范及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12利用Vue3實(shí)現(xiàn)可復(fù)制表格的方法詳解
表格是前端非常常用的一個(gè)控件,本文主要為大家介紹了Vue3如何實(shí)現(xiàn)一個(gè)簡(jiǎn)易的可以復(fù)制的表格,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-12-12vue3.0中的雙向數(shù)據(jù)綁定方法及優(yōu)缺點(diǎn)
這篇文章主要介紹了vue3.0中的雙向數(shù)據(jù)綁定方法 ,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08vue根據(jù)權(quán)限動(dòng)態(tài)渲染按鈕、組件等的函數(shù)式組件實(shí)現(xiàn)
這篇文章主要介紹了vue根據(jù)權(quán)限動(dòng)態(tài)渲染按鈕、組件等的函數(shù)式組件實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望杜大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Vue實(shí)現(xiàn)下載文件而非瀏覽器直接打開(kāi)的方法
對(duì)于瀏覽器來(lái)說(shuō),文本、圖片等可以直接打開(kāi)的文件,不會(huì)進(jìn)行自動(dòng)下載,下面這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)下載文件而非瀏覽器直接打開(kāi)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05vue3項(xiàng)目使用pinia狀態(tài)管理器的使用
Pinia是一個(gè)專(zhuān)為Vue3設(shè)計(jì)的現(xiàn)代化狀態(tài)管理庫(kù),本文主要介紹了vue3項(xiàng)目使用pinia狀態(tài)管理器的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05