Skip to main content

useDistinctObservable 🚧

danger

Experimental

import { useDistinctObservable, useObservable, useObservableState } from 'react-rxjs-toolbox';
import { BehaviorSubject, map } from 'rxjs';

import { useRendersCount } from './hooks';


const search$ = new BehaviorSubject<string>('');

const filters$ = search$.pipe(
map((search) => ({ active: search.length > 5 })),
);

export const DistinctObservableDemo = () => {
return <>
<SearchContainer />

<GeneralInfo />

<DistinctInfo />
</>
};

export const SearchContainer = () => {
const [search, setSearch] = useObservableState(search$);

return <Input value={search} onChange={setSearch} />
};

export const GeneralInfo = () => {
const filters = useObservable(filters$);

return <Text>Active: {String(filters?.active)}</Text>
};

export const DistinctInfo = () => {
const filters = useDistinctObservable(filters$, undefined, (a, b) => a.active === b.active);

return <Text>Active: {String(filters?.active)}</Text>
};

active – search.length > 5

Active: undefined

Renders Count: 1 (Observable)

Active: undefined

Renders Count: 1 (Distinct Observable)