Невозможно выпустить памятку на селекторе ngrx - PullRequest
0 голосов
/ 08 ноября 2019

Я использую 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
    });

Позже в приложении, когда изображение обновляется, но ключ изображения / идентифицируется не меняется, поэтому я хочу принудительно обновить, освободив памятку из селектора. Это должно привести к тому, что изображение снова будет извлечено из хранилища документов.

Этот ответ предлагает освободить памятку.

Создать незапамятованный селектор в ngrx

Поэтому, следуя этому совету, попытайтесь освободить селектор перед вызовом действия по обработке изображений.

async onAnalyseImage() {
    getCurrentImage.release();
    this.store.dispatch(
        ImageViewerActions.analyseImage({
            jobKey: this._currentFile.jobKey
        })
    );
}

Затем, когда действие / эффект завершены, я хочу обновить значение текущего изображения с некоторымименяется, однако ключ в состоянии не изменился. Поэтому я отпускаю селектор, который должен установить значение памятки на ноль.

on(ImageViewerActions.refreshImageCanvas, state => ({
    ...state,
    currentLoadedImage: state.currentLoadedImage,
})),

Вызывается действие «обновить», и редуктор пытается установить значение состояния на то же значение в надежде, что селектор будетбыть вызванным снова.

Этого не происходит, и запоминание сохраняется. Я могу перейти к другому изображению, и, как и ожидалось, вызывается селектор, который обновляет изображение.

Однако я не могу получить обновление для того же ключа значения.

1 Ответ

0 голосов
/ 09 ноября 2019

currentLoadedImage является строкой.

Памятка выполняет сравнение строк, и в Javascript строка является строкой и является строкой.

Таким образом, даже если новый объект строки может быть передан, он все равно будет отображаться как тот же объект. === б

...