Я использую 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,
})),
Вызывается действие «обновить», и редуктор пытается установить значение состояния на то же значение в надежде, что селектор будетбыть вызванным снова.
Этого не происходит, и запоминание сохраняется. Я могу перейти к другому изображению, и, как и ожидалось, вызывается селектор, который обновляет изображение.
Однако я не могу получить обновление для того же ключа значения.