Mobx-runInAction()用法。我们为什么需要它?

时间:2019-07-30 11:59:58

标签: reactjs mobx

我已经阅读了许多有关此主题的网站,但我还没有弄清楚为什么我们需要runInAction方法以及它到底是如何工作的。

有人可以向我解释runInAction功能吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

简短的答案是:您真的不需要 runInAction。您可以在不使用应用程序的情况下编写应用程序,它应该可以正常工作。

但是,如果您正在使用较大的代码库,并且想要实施一些最佳实践,则可以使用mobx功能"enforce actions / strict mode",该功能基本上是强制执行对状态的任何修改都必须在内部进行。这很有用,因为操作使状态状态改变的原因显而易见,并且在mobx devtools中提供了有用的调试信息。

使用此配置标志,如果您尝试在操作之外修改状态,mobx将引发错误。


好的,runInAction是什么?

下面是一个没有runInAction的示例:

loadWeather = city => {
  fetch(
    `https://abnormal-weather-api.herokuapp.com/cities/search?city=${city}`
  )
    .then(response => response.json())
    .then(data => {
      this.setWeatherData(data);   //   <==== here
    });
};


@action
setWeatherData = data => {
  this.weatherData = data;   
};

由于我们使用的是严格模式,因此我们必须定义一个新操作以设置weatherData。

当必须定义一个动作仅使用一次时,这会变得非常繁琐。

这里是runInAction的缩写,

loadWeatherRunInThen = city => {
  fetch(`https://abnormal-weather-api.herokuapp.com/cities/search?city=${city}`)
    .then(response => response.json())
    .then(data => {
      runInAction(() => {
        this.weatherData = data;         // <====== We dont have to define an action
      });
    });
};

因此,runInAction基本上需要一段代码并以匿名操作执行它,而不必为此手动创建操作。

有关更多信息,请查看以下链接: