鍍金池/ 問答/網(wǎng)絡安全  HTML/ 對vue watch的幾點疑問

對vue watch的幾點疑問

問題描述

在vue里面第一個要避免使用的就是eventBus,雖然它很方便,但是它帶來的后果是更加嚴重的,可能引發(fā)很多難以查找的bug。
第二個就是watch。當一個組件內有多個watch的情況下,很可能就會發(fā)生這么一種情況,不知道是哪個watch引起的bug,不知道是誰觸發(fā)了watch。
所以,我感到很疑惑!
在vue中如何優(yōu)雅的使用watch?
以及watch設計的初衷是什么?
既然是數(shù)據(jù)驅動的框架,不應該是通過數(shù)據(jù)變化引起組件變化嗎?
而像watch這種監(jiān)聽數(shù)據(jù)變化這種方式是不是應該被剔除?

回答
編輯回答
尐潴豬

舉個例子,比如我現(xiàn)在子組件中,需要實現(xiàn)這樣一個功能,如果props中的某個對象發(fā)生了變化,那么就觸發(fā)對應的methods。

那么這個時候你需要用什么方法來觸發(fā)對應的methods呢,

這里很顯然需要使用watch。

所以每個方法的存在,都是根據(jù)業(yè)務場景來的。

2018年9月18日 21:33
編輯回答
青檸

你這些問題真的很難回答,昨天我看到一句話,不能問一個技術的設計目的是什么,而是要問,我遇到了哪些問題,有哪些技術可以解決我的問題?

當代的軟件框架基本都是建立在軟件設計模式這個思維范疇內的,那么watch從語義和實際用途分析,顯然是一種觀察者模式。那么觀察者模式本來就是應用于誰對變化的狀態(tài)感興趣,誰去“觀察”這個狀態(tài)。在某些情況下,確實需要跟蹤觀察值的變化,確實要知道變化前的值和變化后的值,那么就需要使用watch。

如果題主遇到了上面的問題,那么可以嘗試watch。

2017年5月25日 20:08
編輯回答
愛礙唉

樓主只需要將watchcomputed進行對比:

  1. 監(jiān)聽的對象個數(shù)不同:
    watch只對一個對象進行監(jiān)聽
    computed對多個對象進行監(jiān)聽
  2. 有無返回值

為什么要和computed對比呢,因為兩者的實現(xiàn)原理是一樣的,都是通過觀察者模式,并且用的時候的感覺也很相似,無非是監(jiān)聽的數(shù)據(jù)變化了觸發(fā)的一系列動作。
那么watch的適用場景自然而然就出來了

需要對單個對象的變化做額外動作且無需返回值的

那如果有兩個對象其中任意一個做變化,且不管其中哪個對象變化都是做相同的動作的時候應該怎么辦呢


把這兩個對象寫在一個對象里面,再watch這個對象
例如:

data(){
    return {
        dataWrapper:{
            data1:null,
            data2:null
        }
    }
},
watch: {
    dataWrapper(){
        handler(){
            // do something...
        },
        deep: true
    }
}

或者

data(){
    return {
        data1:null,
        data2:null
    }
},
computed:{
    dataWrapper(){
        const {data1, data2} = this
        return {
            data1,
            data2
        }
    }
},
watch: {
    dataWrapper(){
        // do something...
    }
}

多個watch之間應該盡量避免數(shù)據(jù)耦合,上面介紹了一種解耦方式,拋磚引玉

存在即合理,沒這個需求肯定不會出這個API

樓主加油

2018年5月3日 04:49