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