UNPKG

use-effect-event

Version:

Ponyfill of the experimental `React.useEffectEvent` hook

43 lines (42 loc) 1.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }); var React = require("react"); function _interopNamespaceCompat(e) { if (e && typeof e == "object" && "default" in e) return e; var n = /* @__PURE__ */ Object.create(null); return e && Object.keys(e).forEach(function(k) { if (k !== "default") { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: !0, get: function() { return e[k]; } }); } }), n.default = e, Object.freeze(n); } var React__namespace = /* @__PURE__ */ _interopNamespaceCompat(React); const context = React__namespace.createContext(!0); function forbiddenInRender() { throw new Error("A function wrapped in useEffectEvent can't be called during rendering."); } const isInvalidExecutionContextForEventFunction = "use" in React__namespace ? () => { try { return React__namespace.use(context); } catch { return !1; } } : () => !1; function useEffectEvent(fn) { const ref = React__namespace.useRef(forbiddenInRender); return React__namespace.useInsertionEffect(() => { ref.current = fn; }, [fn]), (...args) => { isInvalidExecutionContextForEventFunction() && forbiddenInRender(); const latestFn = ref.current; return latestFn(...args); }; } exports.useEffectEvent = useEffectEvent; //# sourceMappingURL=index.cjs.map