Как использовать DataPersistence, чтобы использовать 2 состояния одновременно

Я использую Nx для создания нового приложения, используя NgRx и DataPersistence.

Я сгенерировал несколько состояний в своем приложении (пример: Состояние A, Состояние B).

Чтобы получить данные через запрос API для заполнения состояния A, я использую эффект, связанный с this.dataPersistence.fetch.

Однако, чтобы запустить мой запрос API, мне нужны данные, содержащиеся в состоянии B. Здесь я блокирую.

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

@Injectable()
export class ElementEffects {
constructor (private store: Store<any>, private apiService: ApiService) {}

      @Effect()
      public yourEffect: Observable<Action> = this.actions$.pipe(
        ofType<yourActionClass>(ActionsEnum.YOUR_ACTION),
        withLatestFrom(this.store.pipe(select(selectSomethingFromTheStore))),
        concatMap(([action, selectedDateFromTheStore]) => this.apiService.doBackendCall(selectedDateFromTheStore, action.payload).pipe(
          map(([resultFromTheBackendCall, selectedDateFromTheStore]) => {
            // Do Stuff
          },
          catchError((error) => of(new FailureAction(error)))
          )
        ),
      );
}

Однако я не знаю, как справиться с этим с this.dataPersistence.fetch.

Открыв код DataPersistent ( https://github.com/nrwl/nx/blob/master/packages/angular/src/runtime/nx/data-persistence.ts), я вижу, что fetch функция уже использует withLatestFrom оператор. Я не вижу, как восстановить другое государство.

  fetch<A extends Action = Action>(
    actionType: string,
    opts: FetchOpts<T, A>
  ): Observable<any> {
    return this.actions.pipe(
      ofType<A>(actionType),
      withLatestFrom(this.store),
      fetch(opts)
    );
  }

Поэтому мой вопрос: как восстановить состояние B, когда я использую эффект состояния A?

Надеюсь быть достаточно ясным:)

0 ответов

Да fetch вернет весь государственный магазин.

Итак, вам нужно будет выбрать, какую часть (часть) магазина вы хотите использовать:

const state1 = state['state1'];
const state2 = state['state2'];

Как withLatestFrom тянуть "последние" состояния магазина.

Вот пример из data-persistence.d.ts

@Injectable()
class TodoEffects {
  @Effect() loadTodo = this.s.navigation(TodoComponent, {
    run: (a, state) => {
      console.log(state); // Here you should see all the states in your app
      return this.backend.fetchTodo(a.params['id']).map(todo => ({
        type: 'TODO_LOADED',
        payload: todo
      }));
    },
    onError: (a, e: any) => {
      // we can log and error here and return null
      // we can also navigate back
      return null;
    }
  });
  constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}
}
Другие вопросы по тегам