我在我的项目中使用 NGRX,并且在不断地重新渲染组件时遇到了问题。商店每次都会产生全新的对象,如果商店数据相同,我不想重新渲染我的组件。我将表示组件的更改检测更改为ChangeDetectionStrategy.OnPush
lodash memoization ( _.memoization
),但它不起作用
店铺状况
export interface CardsState {
cardsA: CardA[];
cardsB: CardB[];
cardsC: CardC[];
}
然后将 Store 状态映射为这样的结构
const entities = [{
cards: {
cardsB: [
{}
]
}
}];
并试图防止cardsB
每次通过来自 lodash 的 memoize 更改存储时重新渲染项目
export const memoizeCardBFunc = _.memoize((cardB: CardB): CardB => {
return _.cloneDeep(cardB);
}, (cardB: CardB) => cardB.entityType + cardB.entityId);
在我的智能组件中,我有下一个 html
<div *ngFor="let entity of entities | async">
<div *ngFor="let cardB of entity.cards.cardsB">
<card-b [cardStateModel]="cardB"></card-b>
</div>
</div>
令我惊讶的是,它可以与一个 ngFor 一起正常工作,但如果我有两个 ngFor,它就不起作用了!
<div *ngFor="let cardB of entity.cards.cardsB">
<card-b [cardStateModel]="cardB"></card-b>
</div>
我已经花了2天的时间,它正在杀死我,请帮助!
我不是以英语为母语的人,对错误深表歉意。
谢谢!