4

Angular 2.0 と NGRX でアプリを開発しています。私は React/Redux から来たので、まだいくつかのことを行う方法を考えています。

テンプレート内に何かを印刷したいときは、次のように書くことができます:

@Component({
  selector: 'dashboard',
  directives: [MainContainer],
  styleUrls: [
    './dashboard.style.css'
  ],
  template: `
    <main-container [section]="viewSection | async"></main-container>
  `
})
export class Dashboard {

  private viewSection: Observable<MainViewSection>;

  constructor(
    private store: Store<AppState>
  ) {
    this.viewSection = this.store.let(getMainViewSection());
  }

}

しかし、値が変更された後にいくつかのコードを実行したいと思います(ストアの値を入力として使用します(後でビューが変更されます))

componentWillReceivePropsReactでできることを知っています。

有用であることがわかった唯一のものは、次のようなものです。

export class View {

  constructor(
    private store: Store<AppState>
  ) {
    this.store.select('data').subscribe((val: DataState) => {
      if (!layer) {
        return;
      }
      layer.setData(val);
    });
  }

}

私はそれがエレガントな方法だとは思いませんが、別の方法を理解することはできません.. 人々は私にサービスを使用するように言いました (それがこのケースにどのように適合するかわかりません) @Effects。それが私が探しているものかどうかわかりません。

ありがとう!

4

1 に答える 1

2

@Effectは間違いなくあなたが探しているものだと思います。@Effectは、特定のステート アクションが呼び出されると実行されます。この例は、公式の NgRxサンプル アプリから取得します。

  @Effect() clearSearch$ = this.updates$
    .whenAction(BookActions.SEARCH)
    .map<string>(toPayload)
    .filter(query => query === '')
    .mapTo(this.bookActions.searchComplete([]));

メソッドを使用してwhenAction、効果をトリガーするアクションを指定します。この例でtoPayloadは、実行されたアクションのペイロードのみを返す which を使用しています。ただし、アプリケーションの状態全体にアクセスできます。

たとえば、次のように使用できます。

    .whenAction(YourActions.SOMETHING)
    .switchMap(data => this._xhr.send(data.state.yourData) 
于 2016-07-28T06:15:24.373 に答える