无法在ngrx选择器上释放备忘录
我在angular应用程序中使用NGRX,并使用选择器获取当前作业密钥,如下所示。使用此键,可以从文档存储中获取图像 我在看一些链接,建议ngrx是一个状态存储,而不是一个文档存储。我发现将其用作文档存储会大大降低速度 无论如何,解决方案是有一个单独的图像存储,只需在ngrx状态下处理图像密钥/标识符。这很有效无法在ngrx选择器上释放备忘录,ngrx,ngrx-store,Ngrx,Ngrx Store,我在angular应用程序中使用NGRX,并使用选择器获取当前作业密钥,如下所示。使用此键,可以从文档存储中获取图像 我在看一些链接,建议ngrx是一个状态存储,而不是一个文档存储。我发现将其用作文档存储会大大降低速度 无论如何,解决方案是有一个单独的图像存储,只需在ngrx状态下处理图像密钥/标识符。这很有效 this.store .pipe(select(getCurrentImage)) .subscribe(async currentImageKey => {
this.store
.pipe(select(getCurrentImage))
.subscribe(async currentImageKey => {
this.loadImage(currentImageKey);//Load and set the currentFile
});
稍后在应用程序中,当图像被更新时,但是图像键/标识没有改变,因此我想通过从选择器中释放备忘录来强制更新。这将导致再次从文档存储中检索图像
这个答案建议发布备忘录
因此,按照这个建议,我们尝试在调用图像处理操作之前释放选择器
async onAnalyseImage() {
getCurrentImage.release();
this.store.dispatch(
ImageViewerActions.analyseImage({
jobKey: this._currentFile.jobKey
})
);
}
然后,一旦动作/效果完成,我想用一些更改来更新当前图像的值,但是状态中的键没有更改。所以我释放了选择器,它应该将memonization值设置为null
on(ImageViewerActions.refreshImageCanvas, state => ({
...state,
currentLoadedImage: state.currentLoadedImage,
})),
调用“刷新”操作,reducer尝试将状态值设置为相同的值,希望再次调用选择器
这种情况不会发生,而且记忆化仍然存在。我可以切换到另一个图像,如预期的那样,将调用选择器并更新图像
但是,我无法对同一个值键进行刷新。CurrentLoadeImage是一个字符串 备忘录进行字符串比较,在Javascript中,字符串就是字符串,字符串就是字符串 因此,即使可以传递一个新的字符串对象,它仍将显示为同一个对象。a==b