返回

用故事解读 MobX 源码(二)computed

前端

在上一篇文章中,我们已经介绍了 MobX 中的 observable 属性,它是一个可以被跟踪的属性,当它的值发生变化时,MobX 会自动更新所有依赖于它的 computed 属性的值。

在这一篇文章中,我们将继续介绍 MobX 中的 computed 属性。它是一个计算属性,它可以根据其他 observable 属性的值自动计算出自己的值,并且当这些 observable 属性的值发生变化时,computed 属性的值也会自动更新。这使得 MobX 非常适合构建响应式应用,因为它可以自动跟踪数据的变化并更新 UI,从而减少了开发人员的工作量。

computed 属性的定义

class Person {
  @observable name = '张三';
  @computed get fullName() {
    return `${this.name} 老师`;
  }
}

const person = new Person();
console.log(person.fullName); // 输出: 张三 老师

在这个例子中,fullName 是一个 computed 属性,它根据 name 属性的值自动计算出自己的值。当 name 属性的值发生变化时,fullName 属性的值也会自动更新。

computed 属性的用法

computed 属性可以被用在各种场景中,比如:

  • 计算两个或多个 observable 属性的和、差、积、商等。
  • 根据一个 observable 属性的值来判断另一个 observable 属性是否应该显示或隐藏。
  • 根据一个 observable 属性的值来控制另一个 observable 属性的值。
  • 将一个 observable 属性的值格式化成另一种格式。
  • 将一个 observable 属性的值映射到另一个值。

computed 属性的优点

使用 computed 属性有以下优点:

  • 提高代码的可读性和可维护性: computed 属性使代码更易于阅读和理解,因为它将复杂的计算逻辑封装在了一个单独的属性中。这使得代码更易于维护,因为当需要修改计算逻辑时,只需要修改 computed 属性即可,而不需要修改其他地方的代码。
  • 提高性能: computed 属性可以提高性能,因为它只在需要的时候才会计算自己的值。这意味着当一个 computed 属性的值没有发生变化时,MobX 不会重新计算它的值,从而减少了不必要的计算。
  • 实现响应式编程: MobX 是一个响应式框架,这意味着当 observable 属性的值发生变化时,所有依赖于它的 computed 属性的值都会自动更新。这使得 MobX 非常适合构建响应式应用,因为它可以自动跟踪数据的变化并更新 UI,从而减少了开发人员的工作量。

总结

computed 属性是 MobX 中一个非常强大的工具,它可以用来计算其他 observable 属性的值,并当这些 observable 属性的值发生变化时自动更新自己的值。这使得 MobX 非常适合构建响应式应用,因为它可以自动跟踪数据的变化并更新 UI,从而减少了开发人员的工作量。