请问vue的计算属性“计算属性的 getter 函数是没有副作用 (side effect) 的...”这句话怎么理解?
在模板中放入太多的逻辑会让模板过重且难以维护,因此对于任何复杂逻辑,都应当使用计算属性。
栗子?:
<div id="example"> <p>Original message: "{{ message }}"</p>
<p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({ el: '#example',
data: {
message: 'Hello'
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// `this` 指向 vm 实例
return this.message.split('').reverse().join('')
}
}
})
结果:Original message: "Hello"
Computed reversed message: "olleH"
这里我们声明了一个计算属性 reversedMessage。我们提供的函数将用作 property vm.reversedMessage 的 getter 函数:
console.log(vm.reversedMessage) // => 'olleH'
vm.message = 'Goodbye'
console.log(vm.reversedMessage) // => 'eybdooG'
你可以打开浏览器的控制台,自行修改例子中的 vm。vm.reversedMessage 的值始终取决于 vm.message 的值。
你可以像绑定普通 property 一样在模板中绑定计算属性。Vue 知道 vm.reversedMessage 依赖于 vm.message,因此当 vm.message 发生改变时,所有依赖 vm.reversedMessage 的绑定也会更新。而且最妙的是我们已经以声明的方式创建了这种依赖关系:????????计算属性的 getter 函数是没有副作用 (side effect) 的,这使它更易于测试和理解。????????why?请赐教,不胜感激。
回答:
这里的副作用指的是跟 Watch 比。
在 Watch 里通常你会修改某些数据、以实现数据联动的目的,这会使得数据变化产生难以追踪的问题 ———— “卧槽数据为啥变了、到底谁改的它”。
而 Computed Properties 里则不允许你修改数据(Lint 时会报错),由此带来的副作用自然也就没有了。一般来说可以认为它是个纯函数(Pure Function),所以说它容易测试和理解。
下面这个题主跟你有一样的困惑:
https://stackoverflow.com/que...
回答:
没有副作用,就是这个 getter 方法应该是一个纯函数,计算属性主要是用来 组合并返回既有的数据。这里副作用的意思应该是操作 dom ,更改外部的数据。但是是不是纯函数也取决于使用者。。。
以上是 请问vue的计算属性“计算属性的 getter 函数是没有副作用 (side effect) 的...”这句话怎么理解? 的全部内容, 来源链接: utcz.com/p/936269.html