docs/content/api/isolate.md
# Isolate - [source](https://github.com/cyclejs/cyclejs/tree/master/isolate)
A utility function to make scoped dataflow components in Cycle.js.
```
npm install @cycle/isolate
```
See the Cycle.js [documentation on components](http://cycle.js.org/components.html#multiple-instances-of-the-same-component) for further details.
## Example
```js
import isolate from '@cycle/isolate';
import LabeledSlider from './LabeledSlider';
function bmiCalculator({DOM}) {
let weightProps$ = Rx.Observable.just({
label: 'Weight', unit: 'kg', min: 40, initial: 70, max: 140
});
let heightProps$ = Rx.Observable.just({
label: 'Height', unit: 'cm', min: 140, initial: 170, max: 210
});
// LabeledSlider is a dataflow component
// isolate(LabeledSlider) is an impure function: it generates
// a NEW dataflow component every time it is called.
let WeightSlider = isolate(LabeledSlider);
let HeightSlider = isolate(LabeledSlider);
let weightSlider = WeightSlider({DOM, props$: weightProps$});
let heightSlider = HeightSlider({DOM, props$: heightProps$});
let bmi$ = Rx.Observable.combineLatest(
weightSlider.value$,
heightSlider.value$,
(weight, height) => {
let heightMeters = height * 0.01;
let bmi = Math.round(weight / (heightMeters * heightMeters));
return bmi;
}
);
return {
DOM: bmi$.combineLatest(weightSlider.DOM, heightSlider.DOM,
(bmi, weightVTree, heightVTree) =>
h('div', [
weightVTree,
heightVTree,
h('h2', 'BMI is ' + bmi)
])
)
};
}
```
# API