Например, у вас есть - вы ни на что не подписываетесь ... RxJS ленив, и он будет подписываться на mouseDowns
только тогда, когда вы подпишетесь на результирующий наблюдаемый объект, и, конечно же, он откажется от подписки на подчеркнутые наблюдаемые объекты, когда вы откажетесь от подписки на результирующий наблюдаемый объект. .
Но в целом - да, это хорошая практика - отказаться от подписки, когда вы подписываетесь на что-то ... Но - при использовании RxJS обычно вам не нужно подписываться вручную, а когда вам нужно - скорее всего, вам понадобится подписка во время работы приложения. (так что не нужно отказываться от подписки).
Единственные исключения - когда вы разрабатываете собственных операторов или подключаетесь к чему-то внешнему…
Например, если у вас есть компонент реакции и вы используете перемычки жизненного цикла для подписки на обновления при монтировании и отказываетесь от подписки при размонтировании.
Вот моя библиотека для этой цели 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));
В результате у вас есть только одна подписка для управления всем приложением (appSubscription
), и вам не нужно отказываться от подписки, поскольку она используется во время работы приложения.
То же самое с маршрутизацией и отменой подписки при уходе - в упрощенном случае у вас будет только flatMapLatest
наблюдаемое с текущим местоположением, которое вернет наблюдаемое (как app$
выше) для каждого местоположения ... И снова вам не нужно подписываться / отказываться от подписки вручную - flatMapLatest
сделает это внутренне.
person
Bogdan Savluk
schedule
16.10.2016