2017-04-24 1 views
0

私は@ngrx exampleから次のコードを取りました。上記のコードで@ngrx store.selectを使って常に状態を出力するには?

constructor(private store: Store<fromRoot.State>) { 
    this.searchQuery$ = store.select(fromRoot.getSearchQuery).take(1); 
    this.books$ = store.select(fromRoot.getSearchResults); 
    this.loading$ = store.select(fromRoot.getSearchLoading); 
    } 

store.select新しい結果が以前と異なる場合にのみ値を放出します。どのように私は新しいストリームのにかかわらず、常にthis.books$を発することができる

は、前のストリームから同じか違うのですか?どのようなstore私はそれを使用する必要がありますか?

答えて

2

あなたはrxjsオペレータmapを使用することができます - それはしかしselectとは若干異なる動作します:

store.map(state => state.someAttribute.someSub); 

それは選択した項目が変更されたときselectはデータのみを放出すること、正しいですが - 問題は、なぜあなたはアップデートが必要なのですか?データに変更がなければ、ビューを更新する必要はありません。

+0

私はUIは '@ngrx effect'''スルー' @ngrx DB'''( 'cache''')からのデータを要求する場合があります。 '' 'cache'''にデータがない場合は、私がアクションを送信し、このアクションでペイロードをチェックし、何も見つけないと減速に' cacheAvailbility'''に '' 'と呼ばれる状態プロパティを設定します'' false'''。その状態はコンテナ '' 'observer''によってサブスクライブされ、DBから読み込む別のアクションを開始します。したがって、この ''オブザーバー ''が購読している状態は、前回は '' false''、 '' cache''にはデータがない場合には '' false''に再びなります。これらの両方の状況では、DB準備が必要です。 –

+0

これを複雑にしてしまったかもしれないキャッシュの可用性を管理するために '' 'state'''を使いました。私は効果自体に別のアクションをディスパッチすることができ、その後私は、 '' 'のように' '' if'''ステートメントを使用する必要がある場合(データ===未定義){ \t store.dispatch(新しいReadFromDBAction(はcustomerId)) } else { \t store.dispatch(新しいReachFromCacheSuccessfulAction(customerId))} '' ' –

+1

複雑なアーキテクチャのように私には聞こえるが、私はかなり単純化できると思うが、それはおそらく別の質問の一部だ。一つのこと:/:効果の中に 'dispatch'を使用していない - - 効果は後続のアクションを返すべき旨の途中でアクションを派遣することはngrx店 – olsn

関連する問題