Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 什么时候派生数据对于redux选择器来说过于复杂?_Reactjs_Redux - Fatal编程技术网

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条记录)。然后,我将使用选择器来生成“视图”


我担心的是,这对选择器来说太重了。另外,重选记忆的方式是,在追加记录时,我会重新生成所有派生数据。

我一直在使用问题中描述的重选,到目前为止没有任何问题。最大的缺点是状态的形状主要由一个主选择器定义,而不是由存储中的内容定义,这使得调试工具不太有用。但是,我发现这是调试工具的一个限制,而不是前面提到的使用选择器的限制。在调试时,最好有选择器的树状视图。我同意这种折衷,因为代码最终变得更简单、更容易理解和测试

更新:似乎有一些工作正在进行,以使调试选择器更容易: