Vue为什么console了一次 computed,三次 methods?
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./vue.js">
</script>
</head>
<body>
<div id="app">
<span>
{{computedMessage}}
{{computedMessage}}
{{computedMessage}}
</span>
<span>
{{calcMessage()}}
{{calcMessage()}}
{{calcMessage()}}
</span>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'hi'
},
computed: {
computedMessage() {
console.log('computed')
return 'computed ' + this.message
},
},
methods: {
calcMessage() {
console.log('methods')
return 'calc ' + this.message
}
}
})
</script>
</body>
</html>
官方解释 https://cn.vuejs.org/v2/guide...
我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的依赖进行缓存的。只在相关依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。