@equinor/fusion-observable
Version:
18 lines • 732 B
JavaScript
import { useLayoutEffect, useState } from 'react';
/**
* Apply side effect to Reactive Subject.
*
* __IMPORTANT__ observable returned from epics must return new action or will create infinite loop
*/
export function useObservableEffect(subject, effectOrType, effect) {
const [type] = useState(() => (typeof effectOrType === 'string' ? effectOrType : undefined));
const [fn] = useState(() => effect ?? effectOrType);
useLayoutEffect(() => {
const subscription = type
? subject.addEffect(type, fn)
: subject.addEffect(fn);
return () => subscription.unsubscribe();
}, [subject, type, fn]);
}
export default useObservableEffect;
//# sourceMappingURL=useObservableEffect.js.map