use-throttled-effect
Version:
Throttled effect hook for react
31 lines (23 loc) • 983 B
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useThrottledEffect = undefined;
var _react = require('react');
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var useThrottledEffect = exports.useThrottledEffect = function useThrottledEffect(callback, delay) {
var deps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var lastRan = (0, _react.useRef)(Date.now());
(0, _react.useEffect)(function () {
var handler = setTimeout(function () {
if (Date.now() - lastRan.current >= delay) {
callback();
lastRan.current = Date.now();
}
}, delay - (Date.now() - lastRan.current));
return function () {
clearTimeout(handler);
};
}, [delay].concat(_toConsumableArray(deps)));
};
exports.default = useThrottledEffect;