Redux建议您按照以下方式保持状态:https://redux.js.org/recipes/structuring-reducers/normalizing-state-shape
所以说我的状态是这样的:
document.getElementById("s1").value = WhateverVariable
播放列表对象示例如下:
{
selectedPlaylistIndex: 0,
pageDict: {},
playlistDict: {},
playlistList: [] // holds IDs from playlistDict
}
如果要声明创建一个容器来显示播放列表对象的“ pageList”,则将播放列表的“ pageList”属性作为完整页面对象(而不是ID)的列表传递。我感觉这是一个昂贵的操作,因为pageDict,playlistDict,playlistList或selectedPlaylistIndex会随时更新,它将被渲染并且函数将运行。
是否有更优雅/更好的方法?我觉得我想念什么。
{
id: someId,
active: false,
pageList: [], // holds IDs from pageDict
}
答案 0 :(得分:1)
概括,您要问如何处理关系数据。
上次我不得不处理集成了redux-orm库的关系数据。这是在Redux存储中管理关系数据的小型且不变的ORM。
因此,假设您的业务逻辑如下 1个播放列表中有很多页面,然后为了获取所选播放列表的页面(按播放列表的ID),将使用{{1 }},如下所示:
redux-orm
调用const getSelectedPlaylistId = state => state.application.selectedPlaylistIndex
const getPlaylistPages = createSelector(
orm,
getSelectedPlaylistId,
({ Playlist }, playlistId) => {
return Playlist.withId(playlistId).Pages.all().toRefArray();
}
);
后,仅当其中一种访问的模型发生更改时,结果才会被缓存并重新计算。
此外,如果您不想使用getPlaylistPages
(假设您的应用没有太多模型或任何其他原因),则只需使用reselect库,缓存性能成本计算。
正如我已经提到的,我有这样的经历,我的想法和结论总结在以下SO问题中:How to deal with relational data in Redux?