mirror of
https://github.com/streamich/react-use.git
synced 2026-01-18 14:06:52 +00:00
26 lines
717 B
TypeScript
26 lines
717 B
TypeScript
import { useState } from 'react';
|
|
import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';
|
|
|
|
export interface Observable<T> {
|
|
subscribe: (
|
|
listener: (value: T) => void
|
|
) => {
|
|
unsubscribe: () => void;
|
|
};
|
|
}
|
|
|
|
function useObservable<T>(observable$: Observable<T>): T | undefined;
|
|
function useObservable<T>(observable$: Observable<T>, initialValue: T): T;
|
|
function useObservable<T>(observable$: Observable<T>, initialValue?: T): T | undefined {
|
|
const [value, update] = useState<T | undefined>(initialValue);
|
|
|
|
useIsomorphicLayoutEffect(() => {
|
|
const s = observable$.subscribe(update);
|
|
return () => s.unsubscribe();
|
|
}, [observable$]);
|
|
|
|
return value;
|
|
}
|
|
|
|
export default useObservable;
|