MobX商店的责任

时间:2018-01-02 17:28:06

标签: javascript reactjs mobx

我最近开始使用MobX开展项目。我之前从未使用过MobX,所以我对一件事感到很困惑。

MobX商店的职责是什么?

1)MobX @action@computed应该返回html/jsx吗?在正式的10分钟MobX教程https://mobx.js.org/getting-started.html中有一个@computed get report。这只是一个例子吗?

@computed get report() {
    if (this.todos.length === 0)
        return "<none>";
    return `Next todo: "${this.todos[0].task}". ` +
        `Progress: ${this.completedTodosCount}/${this.todos.length}`;
}

2)在@action中调用API是个好主意吗?喜欢这个?

@action
submitProfileInformation = params => {
  return post("apiendpoint", {
    body: params
  }).then(resp => {
    this.firstName = resp.first_name;
    return "ok";
  });
};

我来自redux世界,我看到它的方式store应该只存储和改变值。行动将反应组件让我们知道某些事情发生了变化,以便他们重新投降。这是正确的吗?

2 个答案:

答案 0 :(得分:2)

  1. 它不会返回任何html或jsx。它只是一个示例,它只返回字符串。
  2. 只应将then部分标记为操作。
  3. 概念是一样的。你应该遵循最佳实践或滥用mobx的灵活性并做坏事。 我建议你阅读这篇文章: https://mobx.js.org/best/store.html

答案 1 :(得分:0)

MobX存储用于存储应用程序状态,包括可观察和不可观察的数据。 (类似于Redux商店,虽然Redux没有可观察的)

MobX操作是修改可观察数据的任何函数。没有规则说你必须把行动存入商店,但这样做是好的做法。

对于你的问题:Actions would react component let know that something has changed so that they would rerender.答案是肯定的,不是。动作是修改可观察数据的函数。您的观察者组件对可观察数据的变化做出反应,而不是对动作函数做出反应。但由于动作总是修改可观察数据,因此调用动作函数应该触发观察者组件作出反应。

@computed decorator只是创建可从其他可观察数据计算的可观察数据(类似于getter函数)