我已经阅读过许多有关此主题的网站,但是我还没有弄清楚为什么我们需要runInAction
方法以及它如何工作。
有人可以向我解释runInAction
功能吗?
谢谢。
最佳答案
简短的答案是:您真的不需要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
使用一段代码并以匿名动作执行它,而不必手动为其创建动作。有关更多信息,请检查以下链接:
https://github.com/mobxjs/mobx/blob/gh-pages/docs/refguide/action.md#runinactionname-thunk
https://github.com/mobxjs/mobx/blob/gh-pages/docs/refguide/api.md#configure
https://www.leighhalliday.com/mobx-async-actions
关于reactjs - Mobx-runInAction()用法。我们为什么需要它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57271153/