react-native-web-internals
Version:
React Native for Web
23 lines (22 loc) • 994 B
JavaScript
import createEventHandle from "../createEventHandle/index.mjs";
import useLayoutEffect from "../useLayoutEffect/index.mjs";
import useStable from "../useStable/index.mjs";
function useEvent(event, options) {
const targetListeners = useStable(() => /* @__PURE__ */new Map()),
addListener = useStable(() => {
const addEventListener = createEventHandle(event, options);
return (target, callback) => {
const removeTargetListener = targetListeners.get(target);
removeTargetListener?.(), callback == null && targetListeners.delete(target);
const removeEventListener = addEventListener(target, callback);
return targetListeners.set(target, removeEventListener), removeEventListener;
};
});
return useLayoutEffect(() => () => {
targetListeners.forEach(removeListener => {
removeListener();
}), targetListeners.clear();
}, [targetListeners]), addListener;
}
export { useEvent as default };
//# sourceMappingURL=index.mjs.map