@huse/effect-ref
Version:
--- title: README nav: title: Hooks path: /hook group: title: Effect Ref path: /effect-ref order: 1 ---
28 lines • 1.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useEffectRef = void 0;
const react_1 = require("react");
// eslint-disable-next-line @typescript-eslint/no-empty-function
const noop = () => { };
function useEffectRef(callback) {
const disposeRef = react_1.useRef(noop);
const effect = react_1.useCallback((element) => {
disposeRef.current();
// To ensure every dispose function is called only once.
disposeRef.current = noop;
if (element) {
const dispose = callback(element);
if (typeof dispose === 'function') {
disposeRef.current = dispose;
}
// Have an extra type check to work with javascript.
else if (dispose !== undefined) {
// eslint-disable-next-line no-console
console.warn('Effect ref callback must return undefined or a dispose function');
}
}
}, [callback]);
return effect;
}
exports.useEffectRef = useEffectRef;
//# sourceMappingURL=index.js.map