UNPKG

wix-style-react

Version:
37 lines (29 loc) 1.33 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = require("react"); var _debounce2 = _interopRequireDefault(require("lodash/debounce")); /** A hook for creating a debounced callback function */ var useDebouncedCallback = function useDebouncedCallback( /** any function you want to debounce */ cb, /** dependencies your callback relies on. * Callback will be reevaluated when dependencies change - * (same as React's useCallback hook) */ dependencies) { var debounceMs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200; var debounceFn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _debounce2["default"]; var callbackRef = (0, _react.useRef)(cb); // eslint-disable-next-line react-hooks/exhaustive-deps var debouncedCallback = (0, _react.useCallback)(debounceFn(function () { callbackRef.current.apply(callbackRef, arguments); }, debounceMs), [debounceMs]); // update callback function when its dependencies change (0, _react.useEffect)(function () { callbackRef.current = cb; }, [cb, dependencies]); return debouncedCallback; }; var _default = useDebouncedCallback; exports["default"] = _default;