色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

vue computed重新觸發

劉柏宏1年前9瀏覽0評論

在Vue中,computed是一種計算屬性,可以用于處理數據并將它們顯示在模板中。 computed是有緩存的,當其依賴的數據沒有發生變化時,會直接讀取緩存中的數據,不會重新計算。但是有時候我們需要讓computed重新觸發計算,本文將會介紹一些方法。

最常見的讓computed重新計算的方法是在watcher中手動觸發計算,可以使用$watch或watch屬性。當在watcher中監聽了computed所依賴的數據,當數據發生變化時,手動將computed的值設置為undefined,在nextTick時computed會重新計算。下面是一個簡單的例子:

watch: {
message: {
handler() {
this.computedValue = undefined;
this.$nextTick(() =>{
console.log(this.computedValue);
});
},
immediate: true,
},
},
computed: {
computedValue() {
console.log('computed');
return this.message.toUpperCase();
},
},

當message發生變化時,會手動將computedValue設置為undefined,然后在nextTick的回調函數中讀取computedValue,此時computed會重新計算。

另一種方法是使用vm.$forceUpdate方法,這個方法可以強制組件重新渲染,會重新計算所有的computed。注意,這個方法會導致組件所有的子組件也會重新渲染,因此可能會帶來一些性能問題。下面是一個例子:

methods: {
update() {
this.$forceUpdate();
this.$nextTick(() =>{
console.log(this.computedValue);
});
},
},
computed: {
computedValue() {
console.log('computed');
return this.message.toUpperCase();
},
},

當調用update方法時,會強制重新渲染組件,此時computed會重新計算。

還有一種方法是使用一個不變的key,這個方法比較簡單,只需要在template中使用一個不變的key,當key變化時,組件會重新渲染,computed也會重新計算。下面是一個例子:

methods: {
update() {
this.key++;
},
},
computed: {
computedValue() {
console.log('computed');
return this.message.toUpperCase();
},
},
data() {
return {
key: 0,
};
},

當調用update方法時,會將key加1,此時組件會使用新的key重新渲染,computed也會重新計算。

總的來說,computed是有緩存的,當其依賴的數據沒有發生變化時,會直接讀取緩存中的數據,不會重新計算。但是有時候我們需要讓computed重新計算,可以使用watcher、vm.$forceUpdate方法或使用一個不變的key來實現。