我正处于一个项目中,我们目前正在使用Redux进行基于React的单页面应用程序中的状态管理,我们遇到了关于何时/如何清理我们商店中未使用数据的问题(技术上)子状态或全局Redux商店)。
例如,我们有一个日历“商店”,看起来像
calendar = {
"2015-11-06": {
// Loads of data
},
... // More dates
}
大多数情况下,我们当时只关心一个日期,但有些情况下,不同的组件需要同时使用不同的日历日期。
问题是:“垃圾收集”商店是否有某种策略?
我最初的想法是,需要特定日历日期的组件必须“保留”该日期,当它卸载时,它将删除其预留。这样,当我们达到某种大小限制时,我们可以删除所有未被任何组件保留的日期。
这有点麻烦,因为它增加了在获取日期和组件卸载时处理“预留”的组件需求。
这是一个可行的策略还是有更好的选择?
答案 0 :(得分:0)
答案 1 :(得分:0)
所有这一切的关键在于这个陈述的组合:
大多数情况下,我们当时只关心一个日期,但有些情况下,不同的组件需要同时使用不同的日历日期。
......以及我们如何考虑像Flux / Redux这样的架构中的状态。
没有什么可以阻止你重建现有的数据存储:
calendar = {
mainDate: {
date: "2015-11-06",
// Loads of data
}
}
然后,只要您遇到需要多个日期的特殊情况之一,就会发出一个操作,将calendar
状态替换为如下所示:
calendar = {
mainDate: {
date: "2015-11-06",
// Loads of data
},
otherDate: {
date: "2016-02-29",
// Other data. Perhaps even less than the loads you'd have in mainDate
}
}
在某个地方,您的组件会自行决定是否需要查看mainDate
或otherDate
。 (他们可以很好地提取适当的内容,然后将内容传递给他们的子组件;您可能想在这里引入一个抽象层。)
当另一个组件使用另一个日期完成时,它将发出另一个生成:
的操作calendar = {
mainDate: {
date: "2015-11-06",
// Loads of data
}
}
...因此自动处理您的垃圾收集问题。
显然,这里有很多实现细节,但这是针对你的情况的。关键概念是包含在任何给定时间运行应用程序所需的所有状态(以及仅状态),并使用操作从一个状态转换到另一个状态。