MobX中@computed和自定义get函数的区别

在学习MobX的过程中发现了一个问题。
首先编写如下代码:

import { observable, computed } from 'mobx';

export default class AppState {
  @observable value = 0;
  addValue() {
    this.value ++;
  }
  subValue() {
    this.value --;
  }
  @computed get getValue() {
    return this.value * 10;
  }
  getTheValue() {
    return this.value * 10;
  }
}

{appState.value}

{appState.getValue}

{appState.getTheValue()}

我想返回一个计算过的值,按照官方文档上说的,是用@computed get来进行操作,毫无疑问这是可行的。但是自己实践发现,自己编写一个普通的get函数,用来return出一个计算过的值,也能实现相同的效果。不知两者有何区别,遂谷歌了一波。发现如下链接:https://github.com/mobxjs/mobx/issues/161

简单说下帖子里讲得东西。
帖子里的代码也是一个和我类似的这么一个情形,作者也在问这两者的区别。
下面有个优秀的回复提到了以下的内容:
首先这两者解决方法都会得到一个相同的结果,但使用@computed的意义在于它能够由MobX进行更智能的优化。
如果我不使用computed属性,直接使用自定义的getTheValue函数的话,那么只要value改变,所有用到getTheValue函数的地方都将重新计算。
如果使用了@computed get getValue,那么getValue将会被缓存,如果value没有改变,那么getValue也不会改变,其它组件也不会收到通知。
此外如果你读取getValue的值,你通常会得到一个缓存的值,而不带@computed装饰器,则会重新计算……

你可能感兴趣的:(MobX中@computed和自定义get函数的区别)