首页 > 解决方案 > Ngrx/data 中不同 MergeStratagy 的真正区别是什么?

问题描述

正如在 ngrx doc 中声明的那样:

IgnoreChanges:更新集合实体并忽略
此操作的所有更改跟踪。每个实体的 changeState 都保持不变。

PreserveChanges:更新未更改实体的当前值。对于
每个更改的实体,它保留当前值并用合并实体覆盖 originalValue。这是查询成功的
默认值。

OverwriteChanges:替换当前集合实体。对于每个
合并的实体,它会丢弃 changeState 并将 changeType 设置为
“未更改”。这是保存成功的默认值。

我将其理解为发生变化时的行为。例如,通过使用 IgnoreChanges,更新实体时,不会发出更改事件。

但是在我的代码中,即使给出了这个策略。实体$ 仍会收到更改事件。

this.resultMetaService.removeOneFromCache(previousResultMeta, { mergeStrategy: MergeStrategy.IgnoreChanges });

this.resultMetas$ = this.resultMetaService.entities$.pipe(
        map(rms => {
            const caseIds = this.metaService.getSyncAllEntities().map(m => m.caseId);
            return rms.filter(rm => caseIds.includes(rm.caseId));
        })
    );

我理解错了吗?而对于 PreserveChanges 和 OverwriteChanges,接收变更事件有什么区别?

标签: angularreduxngrxangular-ngrx-data

解决方案


推荐阅读