rcrx
Version:
Rcrx is a lightweight library that provides Rx.js utilities for React applications.
22 lines (18 loc) • 585 B
text/typescript
import { useEffect, useRef, useState } from "react";
import { Observable } from "rxjs";
export function useSubscribe<TValue, TReturnValue>(
observable: Observable<TValue>,
fn: (value: TValue) => TReturnValue,
defaultReturnValue?: TReturnValue
) {
const [value, setValue] = useState(defaultReturnValue);
const fnRef = useRef<(value: TValue) => TReturnValue>(fn);
fnRef.current = fn;
useEffect(() => {
const subs = observable.subscribe((value) =>
setValue(fnRef.current(value))
);
return () => subs.unsubscribe();
}, [observable]);
return value;
}