UNPKG

ht_hooks

Version:
70 lines (68 loc) 2.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _tslib = require("tslib"); var _lodashEs = require("lodash-es"); var _react = require("react"); //!如果短时间内频繁触发请求,我不立刻发,而是等一段时间用户不再触发时再发请求。 var useDebouncePlugin = function useDebouncePlugin(fetchInstance, _a) { var debounceWait = _a.debounceWait, debounceLeading = _a.debounceLeading, debounceTrailing = _a.debounceTrailing, debounceMaxWait = _a.debounceMaxWait; var debouncedRef = (0, _react.useRef)(); var options = (0, _react.useMemo)(function () { var ret = {}; if (debounceLeading !== undefined) { ret.leading = debounceLeading; } if (debounceTrailing !== undefined) { ret.trailing = debounceTrailing; } if (debounceMaxWait !== undefined) { ret.maxWait = debounceMaxWait; } return ret; }, [debounceLeading, debounceTrailing, debounceMaxWait]); (0, _react.useEffect)(function () { if (debounceWait) { var _originRunAsync_1 = fetchInstance.runAsync.bind(fetchInstance); debouncedRef.current = (0, _lodashEs.debounce)( //#lodash中的防抖api function (callback) { callback(); }, debounceWait, options); // debounce runAsync should be promise // https://github.com/lodash/lodash/issues/4400#issuecomment-834800398 fetchInstance.runAsync = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return new Promise(function (resolve, reject) { var _a; (_a = debouncedRef.current) === null || _a === void 0 ? void 0 : _a.call(debouncedRef, function () { _originRunAsync_1.apply(void 0, (0, _tslib.__spreadArray)([], (0, _tslib.__read)(args), false)).then(resolve)["catch"](reject); }); }); }; return function () { var _a; (_a = debouncedRef.current) === null || _a === void 0 ? void 0 : _a.cancel(); fetchInstance.runAsync = _originRunAsync_1; }; } }, [debounceWait, options]); if (!debounceWait) { return {}; } return { onCancel: function onCancel() { var _a; (_a = debouncedRef.current) === null || _a === void 0 ? void 0 : _a.cancel(); } }; }; var _default = exports["default"] = useDebouncePlugin;