flagsmith-react
Version:
Flagsmith integration for React Single Page Applications (SPA)
32 lines (30 loc) • 813 B
JavaScript
import { useRef, useEffect } from "react";
export function useEventEmitter() {
const ref = useRef();
if (!ref.current) {
ref.current = {
subscriptions: new Set(),
emit: (val) => {
for (const subscription of ref.current.subscriptions) {
subscription(val);
}
},
useSubscription: (callback) => {
const callbackRef = useRef();
callbackRef.current = callback;
useEffect(() => {
function subscription(val) {
if (callbackRef.current) {
callbackRef.current(val);
}
}
ref.current.subscriptions.add(subscription);
return () => {
ref.current.subscriptions.delete(subscription);
};
}, []);
},
};
}
return ref.current;
}