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

问题描述 投票:0回答:1

为什么我们需要

runInAction
方法以及它到底是如何工作的?

有人可以向我解释一下

runInAction
功能吗?

javascript reactjs mobx
1个回答
88
投票

简短的回答是:你并不真正需要

runInAction
。您可以编写一个应用程序而不使用它,它应该可以正常工作。

但是,如果您正在开发更大的代码库,并且想要强制执行一些最佳实践,则可以使用 mobx 功能 “强制操作/严格模式”,这基本上强制执行 对状态的任何修改都必须发生在内部 这很有用,因为操作使状态变化的原因变得显而易见,并且它们在 mobx 开发工具中提供了有用的调试信息。

通过使用此配置标志,如果您尝试修改操作之外的状态,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;   
};

由于我们使用严格模式,因此我们必须定义一个新操作来设置天气数据。

当必须定义一个动作只是为了使用一次时,这很快就会变得乏味。

来了

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
采用一段代码并以匿名操作执行它,而不必为其手动创建操作。

欲了解更多信息,请查看以下链接:


编辑:

上面的答案是在 Mobx 4 时代左右的。

对于 Mobx 6:

默认情况下,MobX 6 及更高版本要求您使用操作来进行 状态的变化。但是,您可以配置 MobX 来禁用此功能 行为。

新文档的链接:

https://mobx.js.org/actions.html#runinaction

https://mobx.js.org/actions.html#disabling-mandatory-actions-

https://mobx.js.org/configuration.html#enforceactions

© www.soinside.com 2019 - 2024. All rights reserved.