微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环检测到@computed属性的错误

如何解决循环检测到@computed属性的错误

我只是MobX的初学者。我正在尝试使用MobX中的计算属性并遇到此错误

[mobx] Cycle detected in computation Store@1.values: function () {
  initializeInstance(this);
  return this[prop];
}

我创建了一个具有可观察计算属性的商店类。当我尝试在React功能组件中使用它时,它给了我这个错误。我看到了针对相同错误消息打开的一堆github问题,但它们都是针对非常特殊的情况。我知道这是因为在至少计算一次之前就已经访问了计算属性的值。我不知道如何避免这种情况。我在这link中做了一个非常简单的用例,可以重现此错误

解决方法

您有2个具有相同名称values的类字段,一个是observable,另一个是computed,您不能同时使用它们,并且实际上不需要其中

export default class Store {
  @observable values; // <--- Not needed

  constructor() {
    this.selectedFilters = {};
    this.assetMap = {};
    this.searchResults = {};
  }

  @computed get values() {
    return [{}];
  }
}

computed用于计算填充(嗯,嗯)或从另一个observable导出一些值。例如,您可以这样使用它

export default class User {
  @observable name = 'John'; 
  @observable lastName= 'Doe'; 

  @computed get fullName() {
    return this.name + this.lastName
  }
}

或者在您的情况下,这样的事情可能会有用

export default class Store {
  @observable values = []

  @computed get filteredValues() {
    return this.values.filter(someFilterFunction);
  }
}

文档https://mobx.js.org/refguide/computed-decorator.html

中的更多内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。