【发布时间】:2021-10-10 16:48:34
【问题描述】:
情况:
我有一个选项卡式react-redux 应用程序,我正在尝试找出我应该如何最好地构建状态(redux 存储/切片)。每个“选项卡”都有一个resourceRef,看起来类似于“app://new-tab”或“app://user/1234567890” - 选择选项卡时呈现的组件由其resourceRef 确定(例如,“app://new-tab”resourceRef 将呈现<NewTab> 组件,“app://user/1234567890”resourceRef 将呈现<UserDisplay> 组件等)。
目前我有tabsSlice 处理选项卡(添加、删除、更新选项卡状态等)。 tabSlice 的状态如下所示:
initialState: {
tabs: [],
activeTabUid: null
}
// Where tabs look like:
// {
// title: (String),
// resourceRef: (String - e.g. "app://new-tab"),
// uid: (String - unique tab identifier),
// componentState: (Object - serializable state object)
// }
// And updating a tab's componentState works like so:
reducers: {
updateTabState: (state, action) => {
const {updateIndex, tabState} = action.payload;
state.tabs[updateIndex].componentState = tabState;
}
}
问题是我在tabsSlice 减速器的每个选项卡对象中都保留了componentState。我目前的解决方案是在父页面组件级别管理状态(例如<NewTab>) - 通过useSelector(selectTabState(tabUid)) 拉动选项卡状态,然后创建一堆状态更新函数以传递给子组件。这感觉不是很 Redux-y,我希望我的所有页面都由 Redux 切片管理 - 即为<NewTab>、<UserDisplay> 以及我所有其他可能的页面组件提供一个切片。问题是,我不知道如何实现这一点,因为这些页面状态是在另一个切片的数组中管理的。
问题:
如何构建此应用程序状态,以便我可以对所有内容使用切片(例如切片中的切片)?甚至可能吗?如果不可能,我目前的解决方案是否合理?
目前我对 Redux 应用程序状态结构的理解是新手,因此,我将不胜感激任何建议或有用资源的链接。
澄清说明:在此应用程序中预期具有相同页面类型的多个选项卡是完全合理的。例如,可能会打开许多 UserDisplay 选项卡 - 每个选项卡都有自己独立的状态,显示一个单独的用户。
【问题讨论】:
标签: reactjs redux react-redux