Vue 僅在結果變更時才更新計算屬性
<p>考慮以下對我遇到的問題的簡化:</p>
<pre class="brush:js;toolbar:false;">export default {
data () {
return {
i_change_alot: 0,
};
},
mounted() {
setInterval(() => {
this.i_change_alot = Math.random();
}, 10);
},
computed: {
someComputedValue() {
this.i_change_alot;
return 'a';
}
}
}
</pre>
<p>我建立了一個屬性<code>i_change_alot</code>,它每 10 毫秒更改為一個隨機值。這意味著該屬性變得極其反應性,因此它將觸發計算屬性。 </p>
<p>透過簡單地呼叫<code>this.i_change_alot</code>,我觸發了一個依賴項(出於範例目的),但是計算屬性的<em>結果</em>永遠不會改變。 </p>
<p>最終結果是計算屬性 <code>someCompulatedValue</code> 每 10 毫秒更新一次,據我所知,這會觸發視圖重新渲染。 </p>
<p>如何讓 <code>someCompulatedValue</code> 只在<em>值/結果</em>改變時重新渲染? </p>
<p>(最初的問題是關於顯示反應性相對日期,例如“1秒前”、“2秒前”等。但是,一段時間後,這會變成<code>30分鐘前</ code>,< code>31 分鐘前</code> 這意味著在整整一分鐘內,字串表示形式沒有更改,但由於依賴日期屬性,它仍然每10 毫秒重新渲染一次)。 </p>
<p>根據 https://github.com/vuejs/vue/issues/11399,我可以創建一個帶有觀察者的結構,但它看起來很違反直覺。 </p>