use-effect-event
Version:
Ponyfill of the experimental `React.useEffectEvent` hook
43 lines (42 loc) • 1.41 kB
JavaScript
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
;