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>