一个mobx中computed属性的问题

对于单个对象,我可以使用computed通过计算获得一些属性,比如

@observable good = {
    number: 2,
    price: 3
}
@computed get totalPrice() {
    return this.good.number * this.good.price;
}

对于数组,比如

@observable goodsList = [{
    number: 2,
    price: 3
},{
    number: 2,
    price: 3
}]

这种情况我如何通过computed获得数组某个元素的计算属性呢,还是只能在改变number的函数中手动去更改,但是我数组的对象中并没有一个totalPrice的属性,每次把单个good push到goodsList中去还要给good添加一个totalPrice属性岂不是很麻烦

阅读 5.1k
2 个回答

good弄成一个单独的model文件

export default class Good{
  @observable number;
  @observable price;
  constructor(number, price) {
    this.number = number;
    this.price = price;
  }
  
  @computed
  get totalPrice() {
    return this.number * this.price
  }   

}

然后在goodList文件中

  @action
  addGood(...args) {
    this.todos.push(new Good(...args));
  }

这样就实现了自动计算, 访问的时候类似 this.props.goodList[0].totalPrice

参考这个TODO LIST

首先你totalPrice里面this.number和this.price能取到值吗?要computed获得数组某个元素的计算属性我想到2个方法:
1.goodsList全部计算一次再通过index去取;
2.另外写一个@observable index保存你要取的index在通过方法totalPrice去取

@computed get totalPrice() {
    const good = goodList[this.index]
    return good.number * good.price;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题