Как восстановить данные из состояния мгновенно? - PullRequest
0 голосов
/ 21 июня 2019

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

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

Я хотел бы указать конкретное значение в моем SettingsState: - базовый URL для запросов API, - количество строк, отображаемых в списке: важно во время запросов API для ограничения данных, подлежащих извлечению. - ...

Когда я нахожусь в Effect, как я могу напрямую получить свои важные параметры для запуска моих запросов API?

Я понял, что для восстановления данных необходимо использовать «селекторы», чтобы получить «Наблюдаемый», который позволит мне получать информацию, как только появится изменение.

Однако здесь я хочу получить значения, не дожидаясь запуска моих запросов API. Как я могу это сделать?

заранее спасибо

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Спасибо за ваш ответ

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

Однако это не полностью решает мою проблему.

В службе, которую запускают мои запросы API, мне нужно получить базовый URL-адрес, чтобы сгенерировать окончательный URL-адрес для использования. Этот URL в настоящее время сложен.

@Injectable({
  providedIn: 'root'
})
export class MaterialService {
  private url = "https://example.com/v1/materials";

  constructor(private http: HttpClient) { }

  getMaterials () {
    return this.http.get (this.url).pipe (
      catchError (this.handleError)
    );
  }

  handleError (error: HttpErrorResponse): Observable<never> {
    return throwError (error.message);
  }
}

Я бы хотел, чтобы мои настройки были в состоянии Settings.

Как я могу интегрировать селектор в независимый сервис, подобный указанному выше?

0 голосов
/ 21 июня 2019

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

Посмотрите на этот пример эффекта:

@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)))
          )
        ),
      );
}

«withLatestFrom» позволяет вам добавить еще одну наблюдаемую ктвоя цепьВы получите результат мгновенно и сможете его использовать.

https://www.learnrxjs.io/operators/combination/withlatestfrom.html

...