我已经阅读了 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代表日记中的食物;食物位于具有数据源的foodGroup中。一个食物也有一个NutritionTable和一个measureUnit;
- MeasurementSystems、measurementUnits和sameTypeUnitConverter用于存储精确的度量信息,例如厘米、米和磅。
- BodyMeasurementTypes、bodyMeasurements和uniqueBodyMeasurements用于跟踪用户测量值,例如胸部尺寸。
- MealSettings和bodyMeasurementShortcutSettings是应用程序 UI 的设置。