Как мой магазин ngrx обнаружит изменения на стороне сервера?

Недавно я добавил хранилище ngrx в свое существующее приложение angular2, чтобы упростить код и поддерживать общее состояние. Однако меня смущает одна часть: я обновляю свое состояние с сервера один раз в начале, а после опеки я просто работаю над состоянием без проверки сервера. Так что же происходит, когда, например, что-то меняется на сервере? Должен ли я проверять это каждый раз, когда я захожу на эту страницу или есть лучший способ? В общем, я хочу знать, как лучше всего убедиться, что данные о вашем состоянии обновляются для отображения данных сервера?

7 голосов | спросил Hasan Wajahat 16 MarpmThu, 16 Mar 2017 14:48:17 +03002017-03-16T14:48:17+03:0002 2017, 14:48:17

1 ответ


0

Рекомендуется использовать эффекты NGRX . Когда вы реализуете эффекты NGRX вместе с хранилищем, любые побочные эффекты HTTP обрабатываются эффектами, которые, в свою очередь, будут использовать действие в хранилище для обновления данных. Эффект прослушивает действие и использует полезную нагрузку действия для выполнения побочного эффекта (HTTP). Когда Эффект заканчивается, он вызывает новое Действие (либо Действие в случае успеха, либо Действие в случае сбоя) с новой полезной нагрузкой, тем самым обновляя данные в Магазине.

В примере в документации по эффектам он показывает Эффект для Login:

@Injectable()
export class AuthEffects {
  constructor(
    private http: Http,
    private actions$: Actions
  ) { }

  @Effect() login$ = this.actions$
      // Listen for the 'LOGIN' action
      .ofType('LOGIN')
      // Map the payload into JSON to use as the request body
      .map(action => JSON.stringify(action.payload))
      .switchMap(payload => this.http.post('/auth', payload)
        // If successful, dispatch success action with result
        .map(res => ({ type: 'LOGIN_SUCCESS', payload: res.json() }))
        // If request fails, dispatch failed action
        .catch(() => Observable.of({ type: 'LOGIN_FAILED' }))
      );
}

В этом примере Effect for Login прослушивает действие LOGIN. Когда происходит действие LOGIN, оно использует полезную нагрузку действия и выполняет HTTP POST. Когда возвращается HTTP POST, он либо вызывает действие LOGIN_SUCCESS с ответом json для полезной нагрузки, либо возвращает LOGIN_FAILED действие.

Таким образом, ваш Магазин всегда остается в курсе любых побочных эффектов, таких как HTTP. Если один компонент обновляет запись в базе данных, Эффект должен уведомить Хранилище, чтобы все компоненты, подписанные на эти данные, получили обновленные данные.

Надеюсь, это поможет.

ответил Tyler Jennings 16 MarpmThu, 16 Mar 2017 15:01:10 +03002017-03-16T15:01:10+03:0003 2017, 15:01:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132