React Redux - 在减速器之间共享状态(减速器层次结构)

React Redux - Sharing state between reducers (reducers hierarchy)

说我有一个类似 expedia 的搜索栏选项卡:

我希望某些字段(例如 出发返回 日期)对所有选项卡通用。

所以我的状态应该类似于

{
  commonReducer: {
    startDate:
    endDate: 
  },
  hotelsReducer: {
    rooms: [],
    location: []
  },
  flightsReducer: {
    from:
    to:
  }
  etc...
}

commonReducer 数据在所有其他 tab reducers 之间共享,因为当他们单击搜索按钮时,所有 reducers 都应该知道所选日期及其特定数据。

有没有办法在 reducer 之间共享数据?或具有某种层次结构,例如:

{
  searchTabsReducer: {
    commonReducer: {
      startDate:
      endDate: 
    },
    hotelsReducer: {
      rooms: [],
      location: []
    },
    flightsReducer: {
      from:
      to:
    }
    etc...
  }
}

以便 searchTabsReducer 处理所有提交(因为他是唯一拥有搜索选项卡状态全貌的人)?

据我了解,combine reducers 函数不支持层次结构。

我最终发现包含所有选项卡状态的文件太大了,但感觉不对。

谢谢。

reducer之间共享数据只需要创建独立的reducer。一个减速器在其他减速器中总是可用的。

使用 redux,来自应用程序状态的所有数据在所有 reducers.

中都可用

此外,redux-thunk 可以为您提供一种在触发操作时从应用程序状态访问所有数据的方法:

(dispatch, getState) => {
  ...
}; 

否则,您可以在任何地方导入 redux 动作,让特定 reducer 的动作触发另一个 reducer 的动作。

这样,"composition" 方法解决了所有用例。

不需要合并reducer,只需将状态从你需要的reducer连接到你想要显示数据的容器即可。

从那里,使用该数据来调度操作,例如您的搜索操作。