【发布时间】:2023-03-12 14:42:01
【问题描述】:
我已经阅读了 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: {} }
};
我的问题是:如何为这种标准化状态编写减速器?我应该为每个状态编写一个减速器,然后处理相同的操作吗?或者我应该为每个操作创建一个减速器并让这个减速器管理所有状态?
例如,如果我每个状态有一个减速器并发送一个动作 REMOVE_DIARY_ENTRY。我将不得不让所有在 diaryEntry 中有引用的状态来处理此操作并检查它们是否需要删除已删除的引用。但是我将如何进行这些检查?
否则,如果我每个动作都有一个 reducer,这些 reducer 可以开始执行非常相似的任务,并与当前状态架构非常耦合。
这部分只是为了澄清
这是他们的意思(它是一个跟踪你吃的应用程序):
- 一个diaryEntry代表日记中的一个食物; food 位于具有 dataSource 的 foodGroup 中。 食物还具有 nutritionalTable 和 >测量单位;
- MeasurementSystems、measurementUnits 和 sameTypeUnitConverter 用于存储厘米、米和磅等度量的精确信息。
- BodyMeasurementTypes、bodyMeasurements 和 uniqueBodyMeasurements 用于跟踪用户测量值,例如胸围。
- MealSettings 和 bodyMeasurementShortcutSettings 是应用 UI 的设置。
【问题讨论】:
标签: javascript reactjs react-native redux normalizr