Ленивая загрузка данных в хранилище NgRX - PullRequest
0 голосов
/ 05 августа 2020

У меня есть веб-приложение SPA, использующее ngrx. (Я унаследовал это, возможно, я бы не стал использовать ngrx, если бы реализовал это сам). Может ли кто-нибудь сказать мне, применима ли концепция «ленивой загрузки данных» к ngrx?

Например, существует ресурс, который иногда требуется различным компонентам. Обычно я бы выполнял сервис, который извлекает этот ресурс из внешнего API. Внутренне, по первому запросу, служба будет возвращать наблюдаемый объект, который будет заполнен из запрошенных данных + кэшированных, поэтому будущие обращения вернут наблюдаемый объект, который уже имеет значение.

Теперь, с NgRX Я не вижу способа вмешаться на уровне доступа, потому что не происходит «logi c», когда данные извлекаются из состояния.

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

1 Ответ

0 голосов
/ 06 августа 2020

Служба все еще может кэшировать эти данные, если вы хотите?

Обычный шаблон - проверить, доступно ли состояние в эффектах, см. https://timdeschryver.dev/blog/start-using-ngrx-effects-for-this#4 -using-a-selector-inside- your-effects для примера.

@Effect()
getOrder = this.actions.pipe(
  ofType<GetOrder>(ActionTypes.GetOrder),
  concatMap(action =>
    of(action).pipe(
      withLatestFrom(this.store.pipe(select(getOrders)))
    )
  ),
  // ???
  filter(([{payload}, orders]) => !!orders[payload.orderId])
  mergeMap([{payload}] => {
    ...
  })
)
...