Javascript/Angular 不变性:“部分”状态更新策略

问题描述

我对 Javascript 不变性概念很陌生,我一直在理解类似 Redux 的库是如何工作的。我正在使用 Angular,但我认为这与概念而非框架更相关...

假设我有以下 Item

interface Item {
   id: string;
   foo: string[];
   bar: number;
}

const item: Item = {
   id: 'abc'
   foo: ['value1','value2'],bar: 123
}

假设我必须管理这些 Item 的集合。我在考虑类似的事情:

interface ItemState {
   [itemId: string]: { // key itemId is the `Item.id` property
     id: string; // repeated?
     foo: string[];
     bar: number;
   }
}

// example
const state: ItemState = {
   abc: { id: 'abc',foo: ['value1',bar: 123 }
   def: { id: 'def',foo: ['value3','value4'],bar: 321 }
   ...
}

现在的问题是:每个 Item 都可以添加/删除/更新,并且每个操作可能需要花费大量时间 由于某些 API 调用和/或大量计算而导致的时间量。出于这个原因,我需要一种方法来最大限度地减少更改次数,尤其是对于那些不受添加/删除/更新操作影响且不需要任何刷新/重新计算的Item

示例:在第一次运行时,id 为 abcdef 的项目将被提取和解析。好的。然后一个新的 Item添加到状态,但这将创建一个新的 ItemState,它将触发一个新的获取和解析所有 Item,即使 abcdef 完全相同(但由于新的 ItemState 而有一个新的引用)。删除或更新操作相同。

如何处理?我可以“部分”更新我的状态而保持全局对象引用不变吗?或者我应该以某种方式将我的 Item 拆分为不同的结构?

我对ngrx的经验很少,它可以解决这个问题吗?我之所以离开它,是因为有大量样板文件支持基于简单 rxjs 主题的更干净的解决方案,但我愿意接受任何解决方案!

希望这是有道理的...谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)