rcrx
Version:
Rcrx is a lightweight library that provides Rx.js utilities for React applications.
29 lines (26 loc) • 719 B
JavaScript
// src/hooks/observable.ts
import { useState as useState2 } from "react";
// src/hooks/subscribe.ts
import { useEffect, useRef, useState } from "react";
function useSubscribe(observable, fn, defaultReturnValue) {
const [value, setValue] = useState(defaultReturnValue);
const fnRef = useRef(fn);
fnRef.current = fn;
useEffect(() => {
const subs = observable.subscribe(
(value2) => setValue(fnRef.current(value2))
);
return () => subs.unsubscribe();
}, [observable]);
return value;
}
// src/hooks/observable.ts
function useObservable(observable) {
const [value, setValue] = useState2();
useSubscribe(observable, setValue);
return value;
}
export {
useObservable,
useSubscribe
};