2016-10-13 5 views
0

私はRxJsとObservablesに一般的になっています。私は、 "takeUntil()"を利用して、 "self-contained" Observableを作成することができるという考えをしっかりと把握しました。RxJs:ナビゲートするときにObservablesからの退会をお勧めしますか?

私は先生が「私はいつもイベントの終了ストリームを作成するためにtakeUntil()を使用するので、私は10年後に何かから退会しませんでした」と言います。これは彼の例です:

var getElementDrags = elmt => elmt 
    .mouseDowns.map(() => document.mouseMoves.takeUntil(document.mouseUps)) 
    .concatAll(); 

これは、 "内部"オブザーバブルには非常に適しています。しかし、 "mousedown"で観測可能な外の1つは、実際には購読を取り消されません。

まだそれらから購読を解除する必要はありますか? ユーザーがページを離脱したときに購読を解除/廃棄することは、まだ良い習慣ですか?例では

+0

あなたのコードでは、何も購読していないので、購読を停止することはありません。 –

+0

@torazaburo:コードはちょっと "擬似"ですが、 "elmt.mouseDowns" Observableを得るための購読があったと思います... – Wolfgang

答えて

0

あなたが持っている - あなたは何にも加入していない... RxJSは怠惰であり、それはあなたが、観察結果を購読する場合にのみmouseDownsに加入します、そしてもちろん - それは時に必要になります観測を下線から解除されます結果として生じる観察可能なものからの退会。

しかし、一般的には、何かを購読しているときに購読を解除するのがよい習慣です...しかし、RxJSを使っている間、通常は手動で購読する必要はなく、必要なときには購読が必要ですアプリが実行中(退会する必要はありません)です。

唯一の例外はある - あなたが自分のオペレータを開発し、または外部の何かに接続しているとき...


たとえばあなたは、コンポーネントを反応させ、マウントの更新にサブスクリプションのライフサイクルhocksを使用している場合と、アンマウントするときは退会してください。ここで

は、その目的https://github.com/zxbodya/rx-react-containerのための私のライブラリである - それは観測、被験者およびレンダリング可能なアイテムと新しい観測可能にコンポーネントを反応を組み合わせた...

const app$ = createContainer(
    App, // react component 
    {totalCount$}, // observables with data 
    {plusOne$, minusOne$} // observers for user actions 
); 

const appElement = document.getElementById('app'); 
const appSubscription = app$.forEach(renderApp=>render(renderApp(), appElement)); 

結果では、あなたが全体のアプリケーションのために管理する唯一の1つのサブスクリプションを持っています(appSubscription)、退会する必要はありません。これは、アプリの実行中に使用されるためです。

同じこと、遠ざけるときのルーティングと退会について - 単純なケースでは、現在の場所で観測可能な範囲がflatMapLatestになり、各場所で観測可能(上記のapp$など)に戻ります。手動で購読/購読解除する - flatMapLatestは内部的にそれを行います。

関連する問題