Reactjs 什么时候派生数据对于redux选择器来说过于复杂?
常见的建议是保持状态最小,并对派生数据使用记忆选择器(如重新选择库)。我知道在某些情况下,把它放进商店是合适的。我的应用程序中有很多派生数据,生成这些数据有些昂贵,但由于其使用方式的性质,不需要经常生成。在哪一点上,数据过于复杂,不适合选择器,应该放在存储中Reactjs 什么时候派生数据对于redux选择器来说过于复杂?,reactjs,redux,Reactjs,Redux,常见的建议是保持状态最小,并对派生数据使用记忆选择器(如重新选择库)。我知道在某些情况下,把它放进商店是合适的。我的应用程序中有很多派生数据,生成这些数据有些昂贵,但由于其使用方式的性质,不需要经常生成。在哪一点上,数据过于复杂,不适合选择器,应该放在存储中 更多详情: 我有时间序列数据,在这些数据上我运行一些计算以生成数据的派生“视图”。每个视图中的记录都是基于之前的所有记录计算的 为了提供一个更具体、更人为的例子: 目前我在indexedDB中做这一切,没有redux 我有一个纯用户输入的
更多详情: 我有时间序列数据,在这些数据上我运行一些计算以生成数据的派生“视图”。每个视图中的记录都是基于之前的所有记录计算的 为了提供一个更具体、更人为的例子: 目前我在indexedDB中做这一切,没有redux 我有一个纯用户输入的主表:
type Earnings = {
id: number;
time: Date;
amount: number;
category: 'A' | 'B' | 'C' | 'D';
};
我有一堆钩子,当收入
数据发生变化时,它们会生成“视图”表
type EarningsByDay = {
id: number;
date: Date; // only used to date part
amountTotal: number;
maxToDate: number;
};
type EarningsByDateAndCategory = {
id: number;
date: Date; // only used to date part
category: 'A' | 'B' | 'C' | 'D';
amountTotal: number;
maxToDate: number;
};
在上面的视图中,EarningsByDay
的maxToDate
是通过从所有EarningsByDay
记录中查找date
小于当前项目日期的最大amountTotal
来计算的。同样,对于按日期和类别赚取的收入
如果用户编辑/删除/插入过去的收入,则需要重新生成之后的所有派生数据。然而,这种情况很少见,而且大多数时候用户都会按时间顺序添加收入
记录(这意味着我所要做的就是搜索过去的记录以找到最大值)
作为我迁移到redux计划的一部分,我计划只将收益
记录存储在indexedDB中,并在发布时将它们全部加载到存储中(一年的数据大约有5000条记录)。然后,我将使用选择器来生成“视图”
我担心的是,这对选择器来说太重了。另外,重选记忆的方式是,在追加记录时,我会重新生成所有派生数据。我一直在使用问题中描述的重选,到目前为止没有任何问题。最大的缺点是状态的形状主要由一个主选择器定义,而不是由存储中的内容定义,这使得调试工具不太有用。但是,我发现这是调试工具的一个限制,而不是前面提到的使用选择器的限制。在调试时,最好有选择器的树状视图。我同意这种折衷,因为代码最终变得更简单、更容易理解和测试 更新:似乎有一些工作正在进行,以使调试选择器更容易: