react-ready-state-effect
Version:
React Effect Hook based on document.readyState
40 lines (36 loc) • 1.15 kB
JavaScript
import { useEffect } from 'react';
var isReadyStateMatch = function isReadyStateMatch(expected) {
if (!expected) {
return true;
}
if ("string" === typeof expected && document.readyState === expected) {
return true;
}
return expected.indexOf(document.readyState) !== -1;
};
var useReadyStateEffect = function useReadyStateEffect(effect) {
var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var onState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "complete";
useEffect(function () {
var destructors = [function () {
return document.removeEventListener("readystatechange", listener);
}];
var listener = function listener() {
if (!isReadyStateMatch(onState)) {
return;
}
var destructor = effect();
if (destructor) {
destructors.push(destructor);
}
};
listener();
document.addEventListener("readystatechange", listener);
return function () {
return destructors.forEach(function (d) {
return d();
});
};
}, deps);
};
export { isReadyStateMatch, useReadyStateEffect };