当ngrx存储状态包含Map时,无法识别对该Map的更改的原因可能是因为ngrx默认使用的是浅比较(shallow comparison)来检测状态的变化。浅比较只会比较对象的引用,而不会比较对象的内容。因此,当对Map对象进行更改时,虽然对象的引用没有发生变化,但对象的内容已经发生了变化,ngrx无法检测到这个变化。
为了解决这个问题,可以使用ngrx提供的深比较(deep comparison)来检测状态的变化。深比较会递归地比较对象的内容,而不仅仅是比较对象的引用。这样,当对Map对象进行更改时,ngrx就能够正确地识别到这个变化。
在ngrx中使用深比较可以通过自定义比较函数来实现。比较函数可以通过实现isEqual
方法来定义,该方法接受两个参数,分别是前一个状态和当前状态,返回一个布尔值表示两个状态是否相等。在比较函数中,可以使用深比较算法来比较Map对象的内容。
以下是一个示例的比较函数的实现:
import { isEqual } from 'lodash';
function mapComparer(prevState: Map<any, any>, currentState: Map<any, any>): boolean {
return isEqual(Array.from(prevState), Array.from(currentState));
}
在使用ngrx存储状态时,可以将这个比较函数传递给createReducer
函数的stateComparer
参数,以便使用深比较来检测状态的变化。
关于ngrx的更多信息和使用方法,可以参考腾讯云提供的ngrx相关产品和文档:
领取专属 10元无门槛券
手把手带您无忧上云