我已经阅读过许多有关此主题的网站,但是我还没有弄清楚为什么我们需要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/

10-11 12:50