我在有角度的应用程序中使用NGRX,并使用选择器来获取当前作业密钥,如下所示。使用此键,从文档存储中拍摄图像。
我正在查看一些链接,建议ngrx是状态存储,而不是文档存储。我发现将其用作文档存储会极大地减慢速度。
https://github.com/btroncone/ngrx-store-localstorage/issues/39
无论如何,解决方案是拥有一个单独的图像存储,并仅以ngrx状态处理图像密钥/标识符。哪个效果很好。
this.store
.pipe(select(getcurrentImage))
.subscribe(async currentImageKey => {
this.loadImage(currentImageKey);//Load and set the currentFile
});
稍后在应用程序中更新图像时,但图像键/标识不会更改,因此我想通过从选择器中释放备忘录来强制进行更新。这将导致再次从文档存储中检索图像。
此答案建议发布备忘录。
Create non-memoized selector on ngrx
因此,遵循该建议,在调用图像处理操作之前尝试释放选择器。
async onAnalyseImage() {
getcurrentImage.release();
this.store.dispatch(
ImageVieweractions.analyseImage({
jobKey: this._currentFile.jobKey
})
);
}
然后,一旦动作/效果完成,我想通过一些更改来更新当前图像的值,但是状态中的键没有更改。因此,我释放选择器,该选择器应将备注值设置为null。
on(ImageVieweractions.refreshImageCanvas,state => ({
...state,currentLoadedImage: state.currentLoadedImage,})),
调用“刷新”操作,reduce尝试将状态值设置为相同的值,希望再次调用选择器。
这不会发生,记忆仍然存在。我可以更改为另一张图像,然后按预期方式,将调用选择器并更新该图像。
但是,我无法刷新相同的值键。