我已经阅读了许多有关此主题的网站,但我还没有弄清楚为什么我们需要runInAction
方法以及它到底是如何工作的。
有人可以向我解释runInAction
功能吗?
谢谢。
答案 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
基本上需要一段代码并以匿名操作执行它,而不必为此手动创建操作。
有关更多信息,请查看以下链接: