vue.js - 为什么自乘返回的数字非常大?
问题描述
我有以下简单的 html 和 Vuejs 代码。当我运行它时,我惊讶地发现输出显示如下。
3 times num = 4.6383976865880985e+49
我期待看到30。
如果我创建一个变量并返回该临时变量,我确实看到了预期值 30。这里发生了什么?
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="test">
<p>3 times num = {{ mulBy3() }}</p>
</div>
new Vue({
el: '#test',
data: {
num: 10
},
methods: {
mulBy3: function() {
this.num = this.num * 3;
return this.num;
}
}
});
解决方案
这有一个重要的教训!Vue 会更新您的页面以反映模型中的更改。如果渲染页面导致模型发生变化(导致 Vue 重新渲染页面),那么您创建了一个无限循环 - 因此您的数字非常大。
这个故事的寓意是你不知道也不应该关心你的模板何时或多久渲染一次。您创建绑定,以便您的页面根据需要反映您的模型,然后让 Vue 来处理它。在实践中,永远不要从渲染函数中调用方法。渲染函数应该使用数据、注入、道具、计算,也许是观察:任何反应性的东西。方法应该用于响应用户活动并将其处理回模型中。
推荐阅读
- flutter - 如何在firebase颤动中检索一列的所有行
- go - 拨打tcp
:6379:连接:连接被拒绝 - python - 刮不带标签
- javascript - 如何确保来自可重用函数的数据集在模板中可用
- laravel - 添加了计算列我得到了数组的集合,而不是 ibjects
- tomcat - 根据主机重定向到不同的页面 - Tomcat
- reactjs - 如何将函数传递给 React 的渲染函数
- html - 如何创建响应式表
- android - 在带有警报对话框的回收站视图中滑动删除
- cassandra - Cassandra,通过以下方式获取行:时间戳+间隔
我在 Cassandra 中有一个基于时间表的平台的表格:
CREATE TABLE test ( url text, lasttest timestamp, testintervalminutes int, PRIMARY KEY(url) ) CREATE INDEX test_timeid