Сохранять состояние с помощью эффекта ngrx ПОСЛЕ обработки редуктора

В моем приложении Angular / ngrx я управляю сохранением данных в indexeddb с помощью @Effect.

  @Effect() updateObj$ = this.actions$
  .ofType(MyActions.UPDATE_OBJ)
  .switchMap( payload => this.storage.set('obj', payload.rawObj));

Но это не то, что я хочу: я не хочу сохранять необработанный объект из полезной нагрузки, а объект, преобразованный моей логикой редуктора (который на самом деле является состоянием результата).

Все примеры, которые я видел, очень простые, поэтому данные могут сохраняться как есть из полезной нагрузки.

Я мог бы поместить эту логику в свой контроллер, но я не думаю, что это сокращенный способ добиться этого.

Не могли бы вы сказать мне лучший способ?


person Benjamin Caure    schedule 25.10.2017    source источник
comment
Если вы хотите сохранить хранилище ngrx (результат редукторов ...), вы можете взглянуть на: github.com/btroncone/ngrx-store-localstorage   -  person maxime1992    schedule 26.10.2017


Ответы (1)


Вы можете получить доступ к последнему состоянию с помощью оператора .withLatestFrom.

@Effect() updateObj$ = this.actions$
    .ofType(MyActions.UPDATE_OBJ)
    .withLatestFrom(this.store$.select(<your-state-selector-goes-here>))
    .switchMap( ([action, state]) => ....);

Официальная документация .withLatestFrom

Упрощенные документы

Поскольку эффект запускается диспетчером действия, полученное вами состояние будет состоянием результата (возвращенным вашим редуктором, обрабатывающим действие UPDATE_OBJ).

person amu    schedule 26.10.2017
comment
Спасибо за ответ, кстати, с NGRX 4 он дает мне ошибку эффект отправил недопустимое действие, поэтому мне пришлось добавить оператор карты .withLatestFrom(this.store.select('xxx')) .map (([action, state]) => ({type: action.type, payload: state})).switchMap(action => - person Benjamin Caure; 26.10.2017