Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在ngrx选择器上释放备忘录_Ngrx_Ngrx Store - Fatal编程技术网

无法在ngrx选择器上释放备忘录

无法在ngrx选择器上释放备忘录,ngrx,ngrx-store,Ngrx,Ngrx Store,我在angular应用程序中使用NGRX,并使用选择器获取当前作业密钥,如下所示。使用此键,可以从文档存储中获取图像 我在看一些链接,建议ngrx是一个状态存储,而不是一个文档存储。我发现将其用作文档存储会大大降低速度 无论如何,解决方案是有一个单独的图像存储,只需在ngrx状态下处理图像密钥/标识符。这很有效 this.store .pipe(select(getCurrentImage)) .subscribe(async currentImageKey => {

我在angular应用程序中使用NGRX,并使用选择器获取当前作业密钥,如下所示。使用此键,可以从文档存储中获取图像

我在看一些链接,建议ngrx是一个状态存储,而不是一个文档存储。我发现将其用作文档存储会大大降低速度

无论如何,解决方案是有一个单独的图像存储,只需在ngrx状态下处理图像密钥/标识符。这很有效

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