这个想法如下:
我有一个包含此模板的组件:
<span class="message" v-once>
{{ headline }}
</span>
我在标题文本上有v-once
指令,因为当组件实际在实际环境中使用时,标题文本无法更改。
现在,我正在构建一个工具,我们可以在其中查看所有组件的详细信息。使用此工具,我在页面上有一个Message输入,允许用户修改组件中看到的文本。只要v-once
不存在,这种方法就可以正常工作。
出于优化目的,我希望有v-once
指令,但我只需要在我的工具中重写一次。我希望我可以使用$forceUpdate()
,但它没有做到这一点(可能仍在考虑v-once
)。
有没有办法实现这个目标?如果没有,我可以离开v-once
,但会很好。
答案 0 :(得分:0)
有趣的问题。我不认为您应该尝试使用v-once
指令刷新组件,因为正如您提到的使用目的是渲染一次并将该组件视为静态内容,这样您的组件就会得到更好的表现。
来自docs:
在Vue中渲染纯HTML元素的速度非常快,但有时您可能会有一个包含大量静态内容的组件。在这些情况下,您可以确保它只被评估一次,然后通过将v-once指令添加到根元素来缓存,如下所示:
<div v-once>
<h1>Terms of Service</h1>
... a lot of static content ...
</div>
因此,您可以使用计算属性来获得更好的性能,因为它们是基于它们的依赖关系缓存的,来自docs:
计算属性仅在其某些依赖项发生更改时才会重新计算。这意味着只要消息没有改变,对reversedMessage计算属性的多次访问将立即返回先前计算的结果,而不必再次运行该函数。
最后的想法:如果您的组件将或可能更新数据元素(并且您希望您的应用程序显示这些更改),则不应使用v-once
指令。