【问题标题】:Is it OK for a reducer to listen to other actions?reducer 可以监听其他动作吗?
【发布时间】:2018-06-11 15:55:20
【问题描述】:

目前我正在创建动作,然后是一个 reducer 来处理我的应用程序的不同部分......不同的域。

我的应用列出班级和学生。

目前我有一个应用程序已加载的操作,以便我知道何时移除加载微调器,我有针对班级和学生的操作。我的问题是我发现我需要连续执行多个操作,并且不确定这是否是使用 redux 的有效方式。

这是一个示例函数,它在数据加载后调度多个操作:

/**
  * Callback used by readAppData.
  *
  * @param object ioResult An object: {success: boolean, errorObj?: object, data?: string}
  */
  dataLoaded(ioResult: Object) {
    if (ioResult.success === true) {
      this.props.dispatch(appActions.appHasLoaded());
      if (ioResult.data !== '') {
        const jsonData = JSON.parse(ioResult.data);
        this.props.dispatch(classActions.replaceClasses(jsonData.classes));
        this.props.dispatch(pupilActions.replacePupils(jsonData.pupils));
      }

    } else if (ioResult.errorObj.code === 'ENOENT') { // File doesn't exist.
      writeAppData('', this.dataSaved);
    } else { // Some other error.
      this.props.dispatch(appActions.appHasErrored());
    }
  }

我正在考虑将 jsonData.classes 和 jsonData.pupils 放入 appActions.appHasLoaded() 调用中,并在我的班级和学生减速器中为 APP_HAS_LOADED 提供一个新案例。

这是更好的方法吗?把它减少到一个动作?有单独的操作可以很容易地看到正在发生的事情......也许在 6 个月的时间里,我将不得不查看我的代码,以弄清楚如果我在其他减速器中使用 APP_HAS_LOADED 上会发生什么。此外,在应用程序启动时加载的数据将不仅仅局限于班级和学生,所以如果我不合并这些调用,很快就会有更多的调度要做——也许我可以将数据存储在单独的文件中并加载每个文件一次一个,这也可以解决我不得不连续调用多个操作的问题。

可以多次调用dispatch吗?

【问题讨论】:

  • 调度多个动作或者让多个reducer监听同一个动作是非常好的。在如何设计 Redux 商店时需要考虑很多事情,但我发现这篇文章对我在特定情况下做出决定很有帮助:stackoverflow.com/questions/47803107/…

标签: reactjs react-redux


【解决方案1】:

是的,你可以。

来自 Redux 创建者 Dan Abramov:

许多reducer 可以处理一个动作。一个 reducer 可以处理许多动作。

引用于Redux Docs

另外,还有一个关于这个的对话on github

【讨论】:

  • 感谢您的帮助...我认为 github 问题正是我的问题:我看到的所有动作/reducers 示例让我认为它们是一对一的
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 2012-03-27
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多