请问vue的计算属性“计算属性的 getter 函数是没有副作用 (side effect) 的...”这句话怎么理解?

请问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

回到顶部