merge
またはcombineLatest
機能にどのストリームが入ってくるのかを特定する方法に関するベストプラクティスの提案を探しています。新しいストリームだけが操作されるようにします。RxJS:結合ストリーム内のストリームソースを識別するための正しいパターン?
TODOアプリケーションのコンテキストでは、着信の追加と削除のストリームがあり、それらを結合してリストの編集を1つのストリーム内でステートレスに行うことができます。出力は、追加(連結)イベントと削除(フィルタ)イベントの両方を統合したリストです。そうしないと、すべての追加イベントまたは削除イベントを含む他のストリームが無限に増加するように見えます。
問題に遭遇するには、次のとおりですmerge
を使用して
- が着信されたストリームを示すものではありません。
combineLatest
を使用すると、どのストリームがサブスクライブされたストリームをトリガーしたのかわからないため、そのストリームに関連する操作だけでなく、withLatestFrom
を使用すると、withLatestFrom
の入力ソースが更新されない新しいリストが生成されるため、このリストに興味のある次のストリームがそのリストに登録されていない限り、リストは同期しなくなります。その前に起こったもののためのあらゆる変形を不必要に再実行する...)。何とか次善のようだ
現在見つかったアプローチは、次のとおりです。
- サイクルJS TODOアプリは、明示的に、私は考えがすべきだろうこれは、識別のため、以前のストリームの作成されたオブジェクトに直接
type
プロパティを割り当てストリームがどこから来たのかを直接的に特定するRxJSメソッドを使用することを奨励してください。 - 私ように、http://www.jisaacks.com/manipulating-rxjs-streams/から提案を取り、付加ストリームの出力を分割し、除去が
[null, {addItem}]
と[removeItem, {null}]
に流れ、追加イベントを削除両方のためmerge
を使用する場合、私はまだ更新されていた着信ストリームを識別できるように単一のストリームで追加と削除の両方を実行することができます(ただし、トグルイベントなどを追加したいのですが、他のすべてのストリームを認識しているストリーム出力を作成する必要があるため[NULL、NULL、myOutput、ヌル、ヌルなど]。
とまでの任意のベストプラクティスの提案は非常に歓迎されている。
ありがとうございました。あなたの経験ではマイナーなように思えるかもしれませんが、私が欠けていた(そして正しいRxの方法で行っていなかった)いくつかの異なる方法が必要であると感じました。特に、combineLatestを使って特定のストリームが更新されたことを確認してください。だから私は実際にこれが本当に重要で正しいと思った(つまりオブジェクトに識別子を付ける)正しい方法ではないことが明確になっていないので、なぜ私の質問が投票されたのかわからない。いずれにしても、私はあなたのラベリング関数と共に 'merge'を使用します。ありがとうございます。 – brokenalarms