Как использовать 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) {}
}