いくつかのイベントに基づく Observable があり、ある時点で高価な計算を行います。その Observable からの結果を複数の異なる場所にレンダリングしたいと思います。この Observable を単純に 2 つの場所でサブスクライブすると、高価な計算を 2 回行うことになります。ここに私のポイントを家に追いやるコードスニペットがあります:
var s = new rx.Subject();
var o = s.map(x => { console.log('expensive computation'); return x });
o.subscribe(x => console.log('1: ' + x));
o.subscribe(x => console.log('2: ' + x));
s.next(42);
出力は次のとおりです。
expensive computation
1: 42
expensive computation
2: 42
マップ内で高価な計算を 1 回だけ実行したいと考えています。share
これを実現しますが、遅れて到着したサブスクライバーがレンダリングする現在の値を取得しないようにします。以前の RxJS バージョンでは、shareValue
遅れて到着したサブスクライバーが現在の値を取得できるようにしていました。ただし、これはshareBehavior
RxJS 5 で名前が変更され、完全に削除されたようです。
https://github.com/ReactiveX/rxjs/pull/588
https://github.com/ReactiveX/rxjs/pull/712
この号には長い議論があり、「ユーザーの混乱を防ぐために shareBehavior と shareReplay を削除する」ことが決定されました。混乱の可能性が何であったかはわかりません (つまり、私はこの決定によって救われたユーザーの 1 人であるということでしょうか?)。
publishBehavior
も有望に見えますが、完全には理解できずpublish
、必要以上に複雑になっているようです。
とにかく、RxJS 5 でこれを達成するための推奨される方法があるかどうか知りたいです。移行ドキュメントには推奨事項はありません。