考虑一个简单的时钟显示和一个输入,我将其绑定为单向,以保持对旧/新状态的控制:
第一个
时钟每秒更新一次。不幸的是,此更新破坏了输入。请在此处尝试:https://jsfiddle.net/dL78tsh9
**如何将绑定更新减少到绝对必要的更新?**在单向绑定上添加一些额外的开关(如:value.lazy="text"
)会很有帮助...
考虑一个简单的时钟显示和一个输入,我将其绑定为单向,以保持对旧/新状态的控制:
第一个
时钟每秒更新一次。不幸的是,此更新破坏了输入。请在此处尝试:https://jsfiddle.net/dL78tsh9
**如何将绑定更新减少到绝对必要的更新?**在单向绑定上添加一些额外的开关(如:value.lazy="text"
)会很有帮助...
4条答案
按热度按时间cnh2zyt31#
每秒更改
time
将导致整个模板每隔1秒重新运行一次。这将导致该模板中的所有内容都得到更新。当用户输入
<input>
元素时,你并没有把值存储在任何地方。你有一个:value
来插入值,但是当值改变时你没有更新它。结果是当Vue重新呈现所有内容时,它会跳回到它的原始值。**可能的解决方案:**请确保您的数据与用户键入的内容保持同步。这可以通过使用
v-model
和watcher获取新旧值来实现,并基于此来实现此要求。您可以尝试类似的方法(这不是一个完美的解决方案,但它会给予您一个想法):
第一个
66bbxpm52#
据我所知,没有办法欺骗VueJs不重新渲染一个特定的字段。
当时间改变时,您现有的虚拟DOM有一个“text”的值,而新生成的虚拟DOM有一个不同的值,所以... VueJS重新呈现它。
更新:
根据@Tolbxela注解,看起来您可以使用v-once只呈现字段一次,并忽略未来的DOM更新。
https://vuejs.org/api/built-in-directives.html#v-once
备选
如果您想控制旧/新状态,为什么不直接使用双向绑定并保存这两种状态呢?
大概是这样的:
第一个
https://jsfiddle.net/dmxLuf9w/6/
ogq8wdun3#
最好的解决方案是根本不使用VueReact性来更新计时器。请参阅下面的UPDATE 2。
最简单的修复方法是将
:value
替换为v-model
更新1:
我们需要另一个数据字段来存储
input
值。检查以下示例。
但对于复杂的应用程序来说,这并不是一个好的解决方案,因为每一秒你的整个应用程序的HTML都在刷新,这可能会导致渲染和延迟的问题。
更新1:
我忽略了比较值的其他逻辑。
更新2:
这个问题帮助我理解了Vue中模板渲染的整个问题。
TransitionGroup lag when using requestAnimationFrame
这里有一篇关于Improve Vue Performance with v-once + v-memo的好文章
代码:
第一次
sg24os4d4#
最简单的修复方法是使用
v-memo="[text]"
:仅当我的
text
属性更新时,才会更新<input>
,而不会更新任何其他属性,例如time
属性。在此处测试:https://jsfiddle.net/dL78tsh9/47/