在从事 Redux 项目时,我发现类似的问题是由于开发人员决定使用 UI 组件来建模其 reducer /数据,而不是孤立地考虑数据(就像设计数据库时那样)。
Q1。我们有一个涉及许多名词/“事物”(轨道、播放列表、用户...)的用户界面。您将如何为此设计 reducer ?每个都有一个单独的 reducer ?将它们全部放在一个“实体” reducer 中?或者其他一些与系统名词不直接关联的 reducer 设计?
第二季度。 UI 有两个组件:资源管理器组件和侧栏组件。资源管理器加载项目列表,并为每个项目提供一些选项(通过下拉/模式/...)来编辑某些属性。您可以将项目加载到侧边栏中,该侧边栏具有用于编辑属性的扩展选项。
通过其中一个组件将项目标记为“#summer”(发送 http 请求,成功返回)。将涉及/调度哪些 reducer 和操作创建者以确保组件反射(reflect)此更新?
最佳答案
Q1:在有意义的地方创建单独的 reducer ,即轨道、播放列表、用户,然后使用类似 combineReducers
的东西把它们放在一起。不要用组件树来建模你的商店,它与之无关。
问题2:您的商店中有一系列商品,每个商品都有其ID。然后,您的商店中有一个单独的 key ,仅保存侧栏中当前选定组件的 ID。资源管理器组件调度操作,类似于 SET_SIDEBAR_ITEM_ID
,具有所需项目的 id。 Sidebar组件订阅了商店,它寻找store.sidebar_item_id
当它找到一个时,它会从商店中取出该商品,例如 store.collection.find(item => item.id === selectedId)
并将其作为 props 传递给 Sidebar 组件。
当谈到你的最后一个问题时,组件不会反射(reflect)任何东西,它们只需要从商店中获取 Prop (通过 connect
装饰器)。一旦商店拥有正确的数据,React 就会为您更新组件。
关于reactjs - Redux reducer 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35470329/