Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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
Javascript 如何在大型规范化Redux存储中组织减缩器_Javascript_Reactjs_React Native_Redux_Normalizr - Fatal编程技术网

Javascript 如何在大型规范化Redux存储中组织减缩器

Javascript 如何在大型规范化Redux存储中组织减缩器,javascript,reactjs,react-native,redux,normalizr,Javascript,Reactjs,React Native,Redux,Normalizr,我已经阅读了Redux网站上的官方文档、一些在线文章以及有关StackOverflow的一些问题,但我仍然不知道如何组织我的州 我规范化了,因为有些实体引用了同一个对象,处理这一点会有问题 正常化后,这是我的状态: state: { measurementSystems: { 0: {}, 1: {} }, measurementUnits: { 0: {}, 1: {} }, sameTypeUnitConverters: { 0: {}, 1: {} }, b

我已经阅读了Redux网站上的官方文档、一些在线文章以及有关StackOverflow的一些问题,但我仍然不知道如何组织我的州

我规范化了,因为有些实体引用了同一个对象,处理这一点会有问题

正常化后,这是我的状态:

state: {
    measurementSystems: { 0: {}, 1: {} },
    measurementUnits: { 0: {}, 1: {} },
    sameTypeUnitConverters: { 0: {}, 1: {} },
    bodyMeasurementTypes: { 0: {}, 1: {} },
    bodyMeasurements: { 0: {}, 1: {} },
    bodyMeasurementShortcutSettings: { 0: {}, 1: {} },
    uniqueBodyMeasurements: { 0: {}, 1: {} },
    nutritionalTables: { 0: {}, 1: {} },
    dataSources: { 0: {}, 1: {} },
    foodGroups: { 0: {}, 1: {} },
    foods: { 0: {}, 1: {} },
    diaryEntries: { 0: {}, 1: {} },
    mealSettings: { 0: {}, 1: {} },
    goals: { 0: {}, 1: {} },
    users: { 0: {}, 1: {} }
};
我的问题是:如何为这种规范化状态编写还原程序?我是否应该为每个状态编写一个减速机,然后执行相同的操作?或者我应该为每个动作创建一个减速机,并让这个减速机管理所有状态

例如,如果我每个州有一个减速机,并发送一个删除日志项的操作。我必须让所有在日记条目中有引用的州来处理此操作,并检查它们是否需要删除已删除的引用。但是我该怎么做这些检查呢

否则,如果每个操作有一个减速机,这些减速机可以开始执行非常类似的任务,并与当前的状态体系结构非常耦合

本部分仅用于澄清

以下是他们的意思(这是一个跟踪你吃什么的应用程序):

  • 日记条目代表日记中的食物食品属于食品组,具有数据源。食品还具有营养表和测量值
  • 测量系统测量系统sameTypeUnitConverter用于存储厘米、米和磅等测量的精确信息
  • 身体测量类型身体测量唯一身体测量用于跟踪用户测量,例如胸部大小
  • 测量设置车身测量短切设置是应用程序界面的设置

我建议首先考虑将向门店发送哪些操作,以及如何使用门店信息。这允许您决定如何更好地拆分存储

  • 可以从组件中调度和存储操作,这些组件将要显示和修改存储以响应用户迭代。例如,您可以使用表格或列表向用户显示日记条目,另一个-显示身体测量值。用户可能需要设置身体测量值或添加日记条目。因此,您可以考虑将<强> > diyAsvs<强> > <强>食物和存储的一个部分中的相关实体和<强> BoyRead < /St>。(这可以是基于React组件如何使用数据的逻辑划分)

  • 测量系统测量系统不能由用户修改(可以由管理员设置或在数据库中预加载)。因此,它们可以被视为目录,并放在商店名为
    目录
    的单独部分中。它们可以通过
    请求目录
    接收目录
    操作从后端加载,并在应用程序中保持只读

  • 用户列表可以是商店的第三部分,例如,它可以由应用程序管理员修改。或者它可以与其他部分分离

  • 目标也可以是商店的独立部分,因为它们可以显示在应用程序的其他部分(而不是显示在日记条目或身体测量的部分)。用户可以设定自己的目标。所以最好把目标放在第四部分

  • 另一种方法可以是考虑如何从后端获取实体并将其保存回去。如果最好一次获取所有实体,则可以将所有实体保留在存储的一个部分中。可能正在将只读实体与可写实体分开。并且具有诸如
    CHANGE\u ENTITY
    之类的通用操作,这些操作将在有效负载中携带
    entityType
    entityType
    将是
    diaryEntries
    BodyMeasures
    或用户想要修改的任何其他内容

    比如说

    { type: 'CHANGE_ENTITY', entityType: 'diaryEntries', key: 0, value: 'some value' }
    

    通过这种方法,所有的商店都可以是单片的。

    @Flyodor谢谢你的回答,我完全同意!但我正在寻找关于Reducer实现的更多细节。示例:目前,我每个状态有一个减速器,并处理它们上的操作。对于影响多个实体的操作,我已创建了一个sharedActions文件,并执行了诸如DELETE_Daily_ENTRY_和REMOVE_FOOD这样的操作:在该操作中,我包括了日记条目的ID和要移除的食物,因此我可以在日记条目和foods中处理该操作(并搜索引用以检查是否可以删除它)。您可以分享一下您通常是如何做到这一点的吗?