icode-hooks 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -0
- package/dist/icode-hooks.js +1 -0
- package/es/createUpdateEffect/index.d.ts +4 -0
- package/es/createUpdateEffect/index.js +22 -0
- package/es/index.d.ts +9 -0
- package/es/index.js +9 -0
- package/es/useBoolean/index.d.ts +8 -0
- package/es/useBoolean/index.js +27 -0
- package/es/useCreation/index.d.ts +2 -0
- package/es/useCreation/index.js +21 -0
- package/es/useLatest/index.d.ts +3 -0
- package/es/useLatest/index.js +7 -0
- package/es/useMemoizedFn/index.d.ts +3 -0
- package/es/useMemoizedFn/index.js +31 -0
- package/es/useMount/index.d.ts +2 -0
- package/es/useMount/index.js +15 -0
- package/es/usePrescription/api.d.ts +7 -0
- package/es/usePrescription/api.js +17 -0
- package/es/usePrescription/index.d.ts +36 -0
- package/es/usePrescription/index.js +119 -0
- package/es/usePrescription/types.d.ts +15 -0
- package/es/usePrescription/types.js +1 -0
- package/es/useRequest/index.d.ts +4 -0
- package/es/useRequest/index.js +4 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/cancel.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/cancel.js +56 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/default.d.ts +6 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/default.js +30 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/lifeCycle.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/lifeCycle.js +55 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/manualRun.d.ts +7 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/manualRun.js +53 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/manualRunAsync.d.ts +7 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/manualRunAsync.js +67 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/mutate.d.ts +6 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/mutate.js +68 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/params.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/params.js +44 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/refresh.d.ts +6 -0
- package/es/useRequest/routes-doc/use-request/demos/basic/refresh.js +35 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/cacheKey.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/cacheKey.js +41 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/clearCache.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/clearCache.js +80 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/params.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/params.js +65 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/setCache.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/setCache.js +48 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/share.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/share.js +37 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/staleTime.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/cache/staleTime.js +43 -0
- package/es/useRequest/routes-doc/use-request/demos/debounce/debounce.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/debounce/debounce.js +41 -0
- package/es/useRequest/routes-doc/use-request/demos/index/default.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/index/default.js +23 -0
- package/es/useRequest/routes-doc/use-request/demos/index/manual.d.ts +7 -0
- package/es/useRequest/routes-doc/use-request/demos/index/manual.js +50 -0
- package/es/useRequest/routes-doc/use-request/demos/loadingDelay/loadingDelay.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/loadingDelay/loadingDelay.js +29 -0
- package/es/useRequest/routes-doc/use-request/demos/polling/polling.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/polling/polling.js +31 -0
- package/es/useRequest/routes-doc/use-request/demos/polling/pollingError.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/polling/pollingError.js +37 -0
- package/es/useRequest/routes-doc/use-request/demos/ready/manualReady.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/ready/manualReady.js +36 -0
- package/es/useRequest/routes-doc/use-request/demos/ready/ready.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/ready/ready.js +28 -0
- package/es/useRequest/routes-doc/use-request/demos/refresh/refreshDeps.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/refresh/refreshDeps.js +60 -0
- package/es/useRequest/routes-doc/use-request/demos/refreshOnWindowFocus/refreshOnWindowFocus.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/refreshOnWindowFocus/refreshOnWindowFocus.js +18 -0
- package/es/useRequest/routes-doc/use-request/demos/retry/retry.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/retry/retry.js +42 -0
- package/es/useRequest/routes-doc/use-request/demos/throttle/throttle.d.ts +3 -0
- package/es/useRequest/routes-doc/use-request/demos/throttle/throttle.js +41 -0
- package/es/useRequest/src/Fetch.d.ts +20 -0
- package/es/useRequest/src/Fetch.js +161 -0
- package/es/useRequest/src/plugins/useAutoRunPlugin.d.ts +3 -0
- package/es/useRequest/src/plugins/useAutoRunPlugin.js +56 -0
- package/es/useRequest/src/plugins/useCachePlugin.d.ts +3 -0
- package/es/useRequest/src/plugins/useCachePlugin.js +143 -0
- package/es/useRequest/src/plugins/useDebouncePlugin.d.ts +3 -0
- package/es/useRequest/src/plugins/useDebouncePlugin.js +61 -0
- package/es/useRequest/src/plugins/useLoadingDelayPlugin.d.ts +3 -0
- package/es/useRequest/src/plugins/useLoadingDelayPlugin.js +40 -0
- package/es/useRequest/src/plugins/usePollingPlugin.d.ts +3 -0
- package/es/useRequest/src/plugins/usePollingPlugin.js +65 -0
- package/es/useRequest/src/plugins/useRefreshOnWindowFocusPlugin.d.ts +3 -0
- package/es/useRequest/src/plugins/useRefreshOnWindowFocusPlugin.js +30 -0
- package/es/useRequest/src/plugins/useRetryPlugin.d.ts +3 -0
- package/es/useRequest/src/plugins/useRetryPlugin.js +45 -0
- package/es/useRequest/src/plugins/useThrottlePlugin.d.ts +3 -0
- package/es/useRequest/src/plugins/useThrottlePlugin.js +53 -0
- package/es/useRequest/src/types.d.ts +73 -0
- package/es/useRequest/src/types.js +1 -0
- package/es/useRequest/src/useRequest.d.ts +3 -0
- package/es/useRequest/src/useRequest.js +14 -0
- package/es/useRequest/src/useRequestImplement.d.ts +5 -0
- package/es/useRequest/src/useRequestImplement.js +72 -0
- package/es/useRequest/src/utils/cache.d.ts +14 -0
- package/es/useRequest/src/utils/cache.js +32 -0
- package/es/useRequest/src/utils/cachePromise.d.ts +4 -0
- package/es/useRequest/src/utils/cachePromise.js +17 -0
- package/es/useRequest/src/utils/cacheSubscribe.d.ts +4 -0
- package/es/useRequest/src/utils/cacheSubscribe.js +19 -0
- package/es/useRequest/src/utils/isDocumentVisible.d.ts +1 -0
- package/es/useRequest/src/utils/isDocumentVisible.js +7 -0
- package/es/useRequest/src/utils/isOnline.d.ts +1 -0
- package/es/useRequest/src/utils/isOnline.js +7 -0
- package/es/useRequest/src/utils/limit.d.ts +1 -0
- package/es/useRequest/src/utils/limit.js +17 -0
- package/es/useRequest/src/utils/subscribeFocus.d.ts +3 -0
- package/es/useRequest/src/utils/subscribeFocus.js +27 -0
- package/es/useRequest/src/utils/subscribeReVisible.d.ts +3 -0
- package/es/useRequest/src/utils/subscribeReVisible.js +21 -0
- package/es/useToggle/index.d.ts +10 -0
- package/es/useToggle/index.js +41 -0
- package/es/useUnmount/index.d.ts +2 -0
- package/es/useUnmount/index.js +17 -0
- package/es/useUpdate/index.d.ts +2 -0
- package/es/useUpdate/index.js +10 -0
- package/es/useUpdateEffect/index.d.ts +3 -0
- package/es/useUpdateEffect/index.js +3 -0
- package/es/utils/createEffectWithTarget.d.ts +4 -0
- package/es/utils/createEffectWithTarget.js +48 -0
- package/es/utils/depsAreSame.d.ts +2 -0
- package/es/utils/depsAreSame.js +8 -0
- package/es/utils/depsEqual.d.ts +2 -0
- package/es/utils/depsEqual.js +11 -0
- package/es/utils/domTarget.d.ts +6 -0
- package/es/utils/domTarget.js +20 -0
- package/es/utils/getDocumentOrShadow.d.ts +3 -0
- package/es/utils/getDocumentOrShadow.js +28 -0
- package/es/utils/index.d.ts +6 -0
- package/es/utils/index.js +18 -0
- package/es/utils/isAppleDevice.d.ts +2 -0
- package/es/utils/isAppleDevice.js +3 -0
- package/es/utils/isBrowser.d.ts +2 -0
- package/es/utils/isBrowser.js +2 -0
- package/es/utils/isDev.d.ts +2 -0
- package/es/utils/isDev.js +3 -0
- package/es/utils/lodash-polyfill.d.ts +2 -0
- package/es/utils/lodash-polyfill.js +11 -0
- package/es/utils/testingHelpers.d.ts +2 -0
- package/es/utils/testingHelpers.js +19 -0
- package/es/utils/tests.d.ts +4 -0
- package/es/utils/tests.js +12 -0
- package/es/utils/useDeepCompareWithTarget.d.ts +4 -0
- package/es/utils/useDeepCompareWithTarget.js +14 -0
- package/es/utils/useEffectWithTarget.d.ts +2 -0
- package/es/utils/useEffectWithTarget.js +5 -0
- package/es/utils/useIsomorphicLayoutEffectWithTarget.d.ts +2 -0
- package/es/utils/useIsomorphicLayoutEffectWithTarget.js +5 -0
- package/es/utils/useLayoutEffectWithTarget.d.ts +2 -0
- package/es/utils/useLayoutEffectWithTarget.js +4 -0
- package/lib/createUpdateEffect/index.d.ts +4 -0
- package/lib/createUpdateEffect/index.js +28 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +69 -0
- package/lib/useBoolean/index.d.ts +8 -0
- package/lib/useBoolean/index.js +33 -0
- package/lib/useCreation/index.d.ts +2 -0
- package/lib/useCreation/index.js +28 -0
- package/lib/useLatest/index.d.ts +3 -0
- package/lib/useLatest/index.js +13 -0
- package/lib/useMemoizedFn/index.d.ts +3 -0
- package/lib/useMemoizedFn/index.js +40 -0
- package/lib/useMount/index.d.ts +2 -0
- package/lib/useMount/index.js +23 -0
- package/lib/usePrescription/api.d.ts +7 -0
- package/lib/usePrescription/api.js +23 -0
- package/lib/usePrescription/index.d.ts +36 -0
- package/lib/usePrescription/index.js +127 -0
- package/lib/usePrescription/types.d.ts +15 -0
- package/lib/usePrescription/types.js +5 -0
- package/lib/useRequest/index.d.ts +4 -0
- package/lib/useRequest/index.js +16 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/cancel.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/cancel.js +65 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/default.d.ts +6 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/default.js +38 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/lifeCycle.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/lifeCycle.js +64 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/manualRun.d.ts +7 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/manualRun.js +63 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/manualRunAsync.d.ts +7 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/manualRunAsync.js +77 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/mutate.d.ts +6 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/mutate.js +78 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/params.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/params.js +53 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/refresh.d.ts +6 -0
- package/lib/useRequest/routes-doc/use-request/demos/basic/refresh.js +45 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/cacheKey.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/cacheKey.js +48 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/clearCache.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/clearCache.js +87 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/params.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/params.js +74 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/setCache.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/setCache.js +55 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/share.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/share.js +44 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/staleTime.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/cache/staleTime.js +50 -0
- package/lib/useRequest/routes-doc/use-request/demos/debounce/debounce.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/debounce/debounce.js +48 -0
- package/lib/useRequest/routes-doc/use-request/demos/index/default.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/index/default.js +30 -0
- package/lib/useRequest/routes-doc/use-request/demos/index/manual.d.ts +7 -0
- package/lib/useRequest/routes-doc/use-request/demos/index/manual.js +60 -0
- package/lib/useRequest/routes-doc/use-request/demos/loadingDelay/loadingDelay.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/loadingDelay/loadingDelay.js +36 -0
- package/lib/useRequest/routes-doc/use-request/demos/polling/polling.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/polling/polling.js +38 -0
- package/lib/useRequest/routes-doc/use-request/demos/polling/pollingError.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/polling/pollingError.js +44 -0
- package/lib/useRequest/routes-doc/use-request/demos/ready/manualReady.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/ready/manualReady.js +43 -0
- package/lib/useRequest/routes-doc/use-request/demos/ready/ready.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/ready/ready.js +35 -0
- package/lib/useRequest/routes-doc/use-request/demos/refresh/refreshDeps.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/refresh/refreshDeps.js +69 -0
- package/lib/useRequest/routes-doc/use-request/demos/refreshOnWindowFocus/refreshOnWindowFocus.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/refreshOnWindowFocus/refreshOnWindowFocus.js +25 -0
- package/lib/useRequest/routes-doc/use-request/demos/retry/retry.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/retry/retry.js +51 -0
- package/lib/useRequest/routes-doc/use-request/demos/throttle/throttle.d.ts +3 -0
- package/lib/useRequest/routes-doc/use-request/demos/throttle/throttle.js +48 -0
- package/lib/useRequest/src/Fetch.d.ts +20 -0
- package/lib/useRequest/src/Fetch.js +168 -0
- package/lib/useRequest/src/plugins/useAutoRunPlugin.d.ts +3 -0
- package/lib/useRequest/src/plugins/useAutoRunPlugin.js +63 -0
- package/lib/useRequest/src/plugins/useCachePlugin.d.ts +3 -0
- package/lib/useRequest/src/plugins/useCachePlugin.js +150 -0
- package/lib/useRequest/src/plugins/useDebouncePlugin.d.ts +3 -0
- package/lib/useRequest/src/plugins/useDebouncePlugin.js +67 -0
- package/lib/useRequest/src/plugins/useLoadingDelayPlugin.d.ts +3 -0
- package/lib/useRequest/src/plugins/useLoadingDelayPlugin.js +46 -0
- package/lib/useRequest/src/plugins/usePollingPlugin.d.ts +3 -0
- package/lib/useRequest/src/plugins/usePollingPlugin.js +72 -0
- package/lib/useRequest/src/plugins/useRefreshOnWindowFocusPlugin.d.ts +3 -0
- package/lib/useRequest/src/plugins/useRefreshOnWindowFocusPlugin.js +37 -0
- package/lib/useRequest/src/plugins/useRetryPlugin.d.ts +3 -0
- package/lib/useRequest/src/plugins/useRetryPlugin.js +51 -0
- package/lib/useRequest/src/plugins/useThrottlePlugin.d.ts +3 -0
- package/lib/useRequest/src/plugins/useThrottlePlugin.js +59 -0
- package/lib/useRequest/src/types.d.ts +73 -0
- package/lib/useRequest/src/types.js +5 -0
- package/lib/useRequest/src/useRequest.d.ts +3 -0
- package/lib/useRequest/src/useRequest.js +21 -0
- package/lib/useRequest/src/useRequestImplement.d.ts +5 -0
- package/lib/useRequest/src/useRequestImplement.js +80 -0
- package/lib/useRequest/src/utils/cache.d.ts +14 -0
- package/lib/useRequest/src/utils/cache.js +37 -0
- package/lib/useRequest/src/utils/cachePromise.d.ts +4 -0
- package/lib/useRequest/src/utils/cachePromise.js +22 -0
- package/lib/useRequest/src/utils/cacheSubscribe.d.ts +4 -0
- package/lib/useRequest/src/utils/cacheSubscribe.js +24 -0
- package/lib/useRequest/src/utils/isDocumentVisible.d.ts +1 -0
- package/lib/useRequest/src/utils/isDocumentVisible.js +14 -0
- package/lib/useRequest/src/utils/isOnline.d.ts +1 -0
- package/lib/useRequest/src/utils/isOnline.js +14 -0
- package/lib/useRequest/src/utils/limit.d.ts +1 -0
- package/lib/useRequest/src/utils/limit.js +23 -0
- package/lib/useRequest/src/utils/subscribeFocus.d.ts +3 -0
- package/lib/useRequest/src/utils/subscribeFocus.js +35 -0
- package/lib/useRequest/src/utils/subscribeReVisible.d.ts +3 -0
- package/lib/useRequest/src/utils/subscribeReVisible.js +28 -0
- package/lib/useToggle/index.d.ts +10 -0
- package/lib/useToggle/index.js +47 -0
- package/lib/useUnmount/index.d.ts +2 -0
- package/lib/useUnmount/index.js +25 -0
- package/lib/useUpdate/index.d.ts +2 -0
- package/lib/useUpdate/index.js +16 -0
- package/lib/useUpdateEffect/index.d.ts +3 -0
- package/lib/useUpdateEffect/index.js +9 -0
- package/lib/utils/createEffectWithTarget.d.ts +4 -0
- package/lib/utils/createEffectWithTarget.js +55 -0
- package/lib/utils/depsAreSame.d.ts +2 -0
- package/lib/utils/depsAreSame.js +14 -0
- package/lib/utils/depsEqual.d.ts +2 -0
- package/lib/utils/depsEqual.js +17 -0
- package/lib/utils/domTarget.d.ts +6 -0
- package/lib/utils/domTarget.js +27 -0
- package/lib/utils/getDocumentOrShadow.d.ts +3 -0
- package/lib/utils/getDocumentOrShadow.js +34 -0
- package/lib/utils/index.d.ts +6 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/isAppleDevice.d.ts +2 -0
- package/lib/utils/isAppleDevice.js +9 -0
- package/lib/utils/isBrowser.d.ts +2 -0
- package/lib/utils/isBrowser.js +8 -0
- package/lib/utils/isDev.d.ts +2 -0
- package/lib/utils/isDev.js +9 -0
- package/lib/utils/lodash-polyfill.d.ts +2 -0
- package/lib/utils/lodash-polyfill.js +23 -0
- package/lib/utils/testingHelpers.d.ts +2 -0
- package/lib/utils/testingHelpers.js +26 -0
- package/lib/utils/tests.d.ts +4 -0
- package/lib/utils/tests.js +30 -0
- package/lib/utils/useDeepCompareWithTarget.d.ts +4 -0
- package/lib/utils/useDeepCompareWithTarget.js +21 -0
- package/lib/utils/useEffectWithTarget.d.ts +2 -0
- package/lib/utils/useEffectWithTarget.js +12 -0
- package/lib/utils/useIsomorphicLayoutEffectWithTarget.d.ts +2 -0
- package/lib/utils/useIsomorphicLayoutEffectWithTarget.js +12 -0
- package/lib/utils/useLayoutEffectWithTarget.d.ts +2 -0
- package/lib/utils/useLayoutEffectWithTarget.js +11 -0
- package/package.json +28 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { __read, __spreadArray } from "tslib";
|
|
2
|
+
import { throttle } from 'lodash-es';
|
|
3
|
+
import { useEffect, useRef } from 'react';
|
|
4
|
+
var useThrottlePlugin = function (fetchInstance, _a) {
|
|
5
|
+
var throttleWait = _a.throttleWait,
|
|
6
|
+
throttleLeading = _a.throttleLeading,
|
|
7
|
+
throttleTrailing = _a.throttleTrailing;
|
|
8
|
+
var throttledRef = useRef();
|
|
9
|
+
var options = {};
|
|
10
|
+
if (throttleLeading !== undefined) {
|
|
11
|
+
options.leading = throttleLeading;
|
|
12
|
+
}
|
|
13
|
+
if (throttleTrailing !== undefined) {
|
|
14
|
+
options.trailing = throttleTrailing;
|
|
15
|
+
}
|
|
16
|
+
useEffect(function () {
|
|
17
|
+
if (throttleWait) {
|
|
18
|
+
var _originRunAsync_1 = fetchInstance.runAsync.bind(fetchInstance);
|
|
19
|
+
throttledRef.current = throttle(function (callback) {
|
|
20
|
+
callback();
|
|
21
|
+
}, throttleWait, options);
|
|
22
|
+
// throttle runAsync should be promise
|
|
23
|
+
// https://github.com/lodash/lodash/issues/4400#issuecomment-834800398
|
|
24
|
+
fetchInstance.runAsync = function () {
|
|
25
|
+
var args = [];
|
|
26
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
27
|
+
args[_i] = arguments[_i];
|
|
28
|
+
}
|
|
29
|
+
return new Promise(function (resolve, reject) {
|
|
30
|
+
var _a;
|
|
31
|
+
(_a = throttledRef.current) === null || _a === void 0 ? void 0 : _a.call(throttledRef, function () {
|
|
32
|
+
_originRunAsync_1.apply(void 0, __spreadArray([], __read(args), false)).then(resolve).catch(reject);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
return function () {
|
|
37
|
+
var _a;
|
|
38
|
+
fetchInstance.runAsync = _originRunAsync_1;
|
|
39
|
+
(_a = throttledRef.current) === null || _a === void 0 ? void 0 : _a.cancel();
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}, [throttleWait, throttleLeading, throttleTrailing]);
|
|
43
|
+
if (!throttleWait) {
|
|
44
|
+
return {};
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
onCancel: function () {
|
|
48
|
+
var _a;
|
|
49
|
+
(_a = throttledRef.current) === null || _a === void 0 ? void 0 : _a.cancel();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
export default useThrottlePlugin;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { DependencyList } from 'react';
|
|
2
|
+
import type Fetch from './Fetch';
|
|
3
|
+
import type { CachedData } from './utils/cache';
|
|
4
|
+
export type Service<TData, TParams extends any[]> = (...args: TParams) => Promise<TData>;
|
|
5
|
+
export type Subscribe = () => void;
|
|
6
|
+
export interface FetchState<TData, TParams extends any[]> {
|
|
7
|
+
loading: boolean;
|
|
8
|
+
params?: TParams;
|
|
9
|
+
data?: TData;
|
|
10
|
+
error?: Error;
|
|
11
|
+
}
|
|
12
|
+
export interface PluginReturn<TData, TParams extends any[]> {
|
|
13
|
+
onBefore?: (params: TParams) => ({
|
|
14
|
+
stopNow?: boolean;
|
|
15
|
+
returnNow?: boolean;
|
|
16
|
+
} & Partial<FetchState<TData, TParams>>) | void;
|
|
17
|
+
onRequest?: (service: Service<TData, TParams>, params: TParams) => {
|
|
18
|
+
servicePromise?: Promise<TData>;
|
|
19
|
+
};
|
|
20
|
+
onSuccess?: (data: TData, params: TParams) => void;
|
|
21
|
+
onError?: (e: Error, params: TParams) => void;
|
|
22
|
+
onFinally?: (params: TParams, data?: TData, e?: Error) => void;
|
|
23
|
+
onCancel?: () => void;
|
|
24
|
+
onMutate?: (data: TData) => void;
|
|
25
|
+
}
|
|
26
|
+
export interface Options<TData, TParams extends any[]> {
|
|
27
|
+
manual?: boolean;
|
|
28
|
+
onBefore?: (params: TParams) => void;
|
|
29
|
+
onSuccess?: (data: TData, params: TParams) => void;
|
|
30
|
+
onError?: (e: Error, params: TParams) => void;
|
|
31
|
+
onFinally?: (params: TParams, data?: TData, e?: Error) => void;
|
|
32
|
+
defaultParams?: TParams;
|
|
33
|
+
refreshDeps?: DependencyList;
|
|
34
|
+
refreshDepsAction?: () => void;
|
|
35
|
+
loadingDelay?: number;
|
|
36
|
+
pollingInterval?: number;
|
|
37
|
+
pollingWhenHidden?: boolean;
|
|
38
|
+
pollingErrorRetryCount?: number;
|
|
39
|
+
refreshOnWindowFocus?: boolean;
|
|
40
|
+
focusTimespan?: number;
|
|
41
|
+
debounceWait?: number;
|
|
42
|
+
debounceLeading?: boolean;
|
|
43
|
+
debounceTrailing?: boolean;
|
|
44
|
+
debounceMaxWait?: number;
|
|
45
|
+
throttleWait?: number;
|
|
46
|
+
throttleLeading?: boolean;
|
|
47
|
+
throttleTrailing?: boolean;
|
|
48
|
+
cacheKey?: string;
|
|
49
|
+
cacheTime?: number;
|
|
50
|
+
staleTime?: number;
|
|
51
|
+
setCache?: (data: CachedData<TData, TParams>) => void;
|
|
52
|
+
getCache?: (params: TParams) => CachedData<TData, TParams> | undefined;
|
|
53
|
+
retryCount?: number;
|
|
54
|
+
retryInterval?: number;
|
|
55
|
+
ready?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export type Plugin<TData, TParams extends any[]> = {
|
|
58
|
+
(fetchInstance: Fetch<TData, TParams>, options: Options<TData, TParams>): PluginReturn<TData, TParams>;
|
|
59
|
+
onInit?: (options: Options<TData, TParams>) => Partial<FetchState<TData, TParams>>;
|
|
60
|
+
};
|
|
61
|
+
export interface Result<TData, TParams extends any[]> {
|
|
62
|
+
loading: boolean;
|
|
63
|
+
data?: TData;
|
|
64
|
+
error?: Error;
|
|
65
|
+
params: TParams | [];
|
|
66
|
+
cancel: Fetch<TData, TParams>['cancel'];
|
|
67
|
+
refresh: Fetch<TData, TParams>['refresh'];
|
|
68
|
+
refreshAsync: Fetch<TData, TParams>['refreshAsync'];
|
|
69
|
+
run: Fetch<TData, TParams>['run'];
|
|
70
|
+
runAsync: Fetch<TData, TParams>['runAsync'];
|
|
71
|
+
mutate: Fetch<TData, TParams>['mutate'];
|
|
72
|
+
}
|
|
73
|
+
export type Timeout = ReturnType<typeof setTimeout>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Options, Plugin, Service } from './types';
|
|
2
|
+
declare function useRequest<TData, TParams extends any[]>(service: Service<TData, TParams>, options?: Options<TData, TParams>, plugins?: Plugin<TData, TParams>[]): import("./types").Result<TData, TParams>;
|
|
3
|
+
export default useRequest;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { __read, __spreadArray } from "tslib";
|
|
2
|
+
import useAutoRunPlugin from './plugins/useAutoRunPlugin';
|
|
3
|
+
import useCachePlugin from './plugins/useCachePlugin';
|
|
4
|
+
import useDebouncePlugin from './plugins/useDebouncePlugin';
|
|
5
|
+
import useLoadingDelayPlugin from './plugins/useLoadingDelayPlugin';
|
|
6
|
+
import usePollingPlugin from './plugins/usePollingPlugin';
|
|
7
|
+
import useRefreshOnWindowFocusPlugin from './plugins/useRefreshOnWindowFocusPlugin';
|
|
8
|
+
import useRetryPlugin from './plugins/useRetryPlugin';
|
|
9
|
+
import useThrottlePlugin from './plugins/useThrottlePlugin';
|
|
10
|
+
import useRequestImplement from './useRequestImplement';
|
|
11
|
+
function useRequest(service, options, plugins) {
|
|
12
|
+
return useRequestImplement(service, options, __spreadArray(__spreadArray([], __read(plugins || []), false), [useDebouncePlugin, useLoadingDelayPlugin, usePollingPlugin, useRefreshOnWindowFocusPlugin, useThrottlePlugin, useAutoRunPlugin, useCachePlugin, useRetryPlugin], false));
|
|
13
|
+
}
|
|
14
|
+
export default useRequest;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Options, Plugin, Result, Service } from './types';
|
|
2
|
+
declare function useRequestImplement<TData, TParams extends any[]>(service: Service<TData, TParams>, // 请求函数
|
|
3
|
+
options?: Options<TData, TParams>, // 请求配置
|
|
4
|
+
plugins?: Plugin<TData, TParams>[]): Result<TData, TParams>;
|
|
5
|
+
export default useRequestImplement;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { __assign, __read, __rest, __spreadArray } from "tslib";
|
|
2
|
+
import useCreation from '../../useCreation';
|
|
3
|
+
import useLatest from '../../useLatest';
|
|
4
|
+
import useMemoizedFn from '../../useMemoizedFn';
|
|
5
|
+
import useMount from '../../useMount';
|
|
6
|
+
import useUnmount from '../../useUnmount';
|
|
7
|
+
import useUpdate from '../../useUpdate';
|
|
8
|
+
import isDev from '../../utils/isDev';
|
|
9
|
+
import Fetch from './Fetch';
|
|
10
|
+
function useRequestImplement(service,
|
|
11
|
+
// 请求函数
|
|
12
|
+
options,
|
|
13
|
+
// 请求配置
|
|
14
|
+
plugins) {
|
|
15
|
+
if (options === void 0) {
|
|
16
|
+
options = {};
|
|
17
|
+
}
|
|
18
|
+
if (plugins === void 0) {
|
|
19
|
+
plugins = [];
|
|
20
|
+
}
|
|
21
|
+
var _a = options.manual,
|
|
22
|
+
manual = _a === void 0 ? false : _a,
|
|
23
|
+
rest = __rest(options, ["manual"]);
|
|
24
|
+
if (isDev) {
|
|
25
|
+
if (options.defaultParams && !Array.isArray(options.defaultParams)) {
|
|
26
|
+
console.warn("expected defaultParams is array, got ".concat(typeof options.defaultParams));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
var fetchOptions = __assign({
|
|
30
|
+
manual: manual
|
|
31
|
+
}, rest);
|
|
32
|
+
var serviceRef = useLatest(service);
|
|
33
|
+
var update = useUpdate();
|
|
34
|
+
var fetchInstance = useCreation(function () {
|
|
35
|
+
// 筛选出所有插件的 onInit 把没有返回值的插件过滤掉
|
|
36
|
+
var initState = plugins.map(function (p) {
|
|
37
|
+
var _a;
|
|
38
|
+
return (_a = p === null || p === void 0 ? void 0 : p.onInit) === null || _a === void 0 ? void 0 : _a.call(p, fetchOptions);
|
|
39
|
+
}).filter(Boolean);
|
|
40
|
+
return new Fetch(serviceRef, fetchOptions, update, Object.assign.apply(Object, __spreadArray([{}], __read(initState), false)));
|
|
41
|
+
}, []);
|
|
42
|
+
fetchInstance.options = fetchOptions;
|
|
43
|
+
// run all plugins hooks
|
|
44
|
+
fetchInstance.pluginImpls = plugins.map(function (p) {
|
|
45
|
+
return p(fetchInstance, fetchOptions);
|
|
46
|
+
});
|
|
47
|
+
// 挂载时执行
|
|
48
|
+
useMount(function () {
|
|
49
|
+
if (!manual) {
|
|
50
|
+
// useCachePlugin can set fetchInstance.state.params from cache when init
|
|
51
|
+
var params = fetchInstance.state.params || options.defaultParams || [];
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
fetchInstance.run.apply(fetchInstance, __spreadArray([], __read(params), false));
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
useUnmount(function () {
|
|
57
|
+
fetchInstance.cancel();
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
loading: fetchInstance.state.loading,
|
|
61
|
+
data: fetchInstance.state.data,
|
|
62
|
+
error: fetchInstance.state.error,
|
|
63
|
+
params: fetchInstance.state.params || [],
|
|
64
|
+
cancel: useMemoizedFn(fetchInstance.cancel.bind(fetchInstance)),
|
|
65
|
+
refresh: useMemoizedFn(fetchInstance.refresh.bind(fetchInstance)),
|
|
66
|
+
refreshAsync: useMemoizedFn(fetchInstance.refreshAsync.bind(fetchInstance)),
|
|
67
|
+
run: useMemoizedFn(fetchInstance.run.bind(fetchInstance)),
|
|
68
|
+
runAsync: useMemoizedFn(fetchInstance.runAsync.bind(fetchInstance)),
|
|
69
|
+
mutate: useMemoizedFn(fetchInstance.mutate.bind(fetchInstance))
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export default useRequestImplement;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Timer = ReturnType<typeof setTimeout>;
|
|
2
|
+
type CachedKey = string | number;
|
|
3
|
+
export interface CachedData<TData = any, TParams = any> {
|
|
4
|
+
data: TData;
|
|
5
|
+
params: TParams;
|
|
6
|
+
time: number;
|
|
7
|
+
}
|
|
8
|
+
interface RecordData extends CachedData {
|
|
9
|
+
timer: Timer | undefined;
|
|
10
|
+
}
|
|
11
|
+
declare const setCache: (key: CachedKey, cacheTime: number, cachedData: CachedData) => void;
|
|
12
|
+
declare const getCache: (key: CachedKey) => RecordData | undefined;
|
|
13
|
+
declare const clearCache: (key?: string | string[]) => void;
|
|
14
|
+
export { getCache, setCache, clearCache };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { __assign } from "tslib";
|
|
2
|
+
var cache = new Map();
|
|
3
|
+
var setCache = function (key, cacheTime, cachedData) {
|
|
4
|
+
var currentCache = cache.get(key);
|
|
5
|
+
if (currentCache === null || currentCache === void 0 ? void 0 : currentCache.timer) {
|
|
6
|
+
clearTimeout(currentCache.timer);
|
|
7
|
+
}
|
|
8
|
+
var timer = undefined;
|
|
9
|
+
if (cacheTime > -1) {
|
|
10
|
+
// if cache out, clear it
|
|
11
|
+
timer = setTimeout(function () {
|
|
12
|
+
cache.delete(key);
|
|
13
|
+
}, cacheTime);
|
|
14
|
+
}
|
|
15
|
+
cache.set(key, __assign(__assign({}, cachedData), {
|
|
16
|
+
timer: timer
|
|
17
|
+
}));
|
|
18
|
+
};
|
|
19
|
+
var getCache = function (key) {
|
|
20
|
+
return cache.get(key);
|
|
21
|
+
};
|
|
22
|
+
var clearCache = function (key) {
|
|
23
|
+
if (key) {
|
|
24
|
+
var cacheKeys = Array.isArray(key) ? key : [key];
|
|
25
|
+
cacheKeys.forEach(function (cacheKey) {
|
|
26
|
+
return cache.delete(cacheKey);
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
cache.clear();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
export { getCache, setCache, clearCache };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var cachePromise = new Map();
|
|
2
|
+
var getCachePromise = function (cacheKey) {
|
|
3
|
+
return cachePromise.get(cacheKey);
|
|
4
|
+
};
|
|
5
|
+
var setCachePromise = function (cacheKey, promise) {
|
|
6
|
+
// Should cache the same promise, cannot be promise.finally
|
|
7
|
+
// Because the promise.finally will change the reference of the promise
|
|
8
|
+
cachePromise.set(cacheKey, promise);
|
|
9
|
+
// no use promise.finally for compatibility
|
|
10
|
+
promise.then(function (res) {
|
|
11
|
+
cachePromise.delete(cacheKey);
|
|
12
|
+
return res;
|
|
13
|
+
}).catch(function () {
|
|
14
|
+
cachePromise.delete(cacheKey);
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
export { getCachePromise, setCachePromise };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var listeners = {};
|
|
2
|
+
var trigger = function (key, data) {
|
|
3
|
+
if (listeners[key]) {
|
|
4
|
+
listeners[key].forEach(function (item) {
|
|
5
|
+
return item(data);
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
var subscribe = function (key, listener) {
|
|
10
|
+
if (!listeners[key]) {
|
|
11
|
+
listeners[key] = [];
|
|
12
|
+
}
|
|
13
|
+
listeners[key].push(listener);
|
|
14
|
+
return function unsubscribe() {
|
|
15
|
+
var index = listeners[key].indexOf(listener);
|
|
16
|
+
listeners[key].splice(index, 1);
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export { trigger, subscribe };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function isDocumentVisible(): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function isOnline(): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function limit(fn: any, timespan: number): (...args: any[]) => void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { __read, __spreadArray } from "tslib";
|
|
2
|
+
// 限制函数执行频率
|
|
3
|
+
export default function limit(fn, timespan) {
|
|
4
|
+
var pending = false;
|
|
5
|
+
return function () {
|
|
6
|
+
var args = [];
|
|
7
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
8
|
+
args[_i] = arguments[_i];
|
|
9
|
+
}
|
|
10
|
+
if (pending) return;
|
|
11
|
+
pending = true;
|
|
12
|
+
fn.apply(void 0, __spreadArray([], __read(args), false));
|
|
13
|
+
setTimeout(function () {
|
|
14
|
+
pending = false;
|
|
15
|
+
}, timespan);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// from swr
|
|
2
|
+
import isBrowser from '../../../utils/isBrowser';
|
|
3
|
+
import isDocumentVisible from './isDocumentVisible';
|
|
4
|
+
import isOnline from './isOnline';
|
|
5
|
+
var listeners = [];
|
|
6
|
+
function subscribe(listener) {
|
|
7
|
+
listeners.push(listener);
|
|
8
|
+
return function unsubscribe() {
|
|
9
|
+
var index = listeners.indexOf(listener);
|
|
10
|
+
if (index > -1) {
|
|
11
|
+
listeners.splice(index, 1);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
// 订阅窗口聚焦事件
|
|
16
|
+
if (isBrowser) {
|
|
17
|
+
var revalidate = function () {
|
|
18
|
+
if (!isDocumentVisible() || !isOnline()) return;
|
|
19
|
+
for (var i = 0; i < listeners.length; i++) {
|
|
20
|
+
var listener = listeners[i];
|
|
21
|
+
listener();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
window.addEventListener('visibilitychange', revalidate, false);
|
|
25
|
+
window.addEventListener('focus', revalidate, false);
|
|
26
|
+
}
|
|
27
|
+
export default subscribe;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import isBrowser from '../../../utils/isBrowser';
|
|
2
|
+
import isDocumentVisible from './isDocumentVisible';
|
|
3
|
+
var listeners = [];
|
|
4
|
+
function subscribe(listener) {
|
|
5
|
+
listeners.push(listener);
|
|
6
|
+
return function unsubscribe() {
|
|
7
|
+
var index = listeners.indexOf(listener);
|
|
8
|
+
listeners.splice(index, 1);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
if (isBrowser) {
|
|
12
|
+
var revalidate = function () {
|
|
13
|
+
if (!isDocumentVisible()) return; // 如果页面隐藏,则停止轮询,并订阅可见事件
|
|
14
|
+
for (var i = 0; i < listeners.length; i++) {
|
|
15
|
+
var listener = listeners[i];
|
|
16
|
+
listener();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
window.addEventListener('visibilitychange', revalidate, false);
|
|
20
|
+
}
|
|
21
|
+
export default subscribe;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface Actions<T> {
|
|
2
|
+
setLeft: () => void;
|
|
3
|
+
setRight: () => void;
|
|
4
|
+
toggle: () => void;
|
|
5
|
+
set: (value: T) => void;
|
|
6
|
+
}
|
|
7
|
+
declare function useToggle<T = boolean>(): [boolean, Actions<T>];
|
|
8
|
+
declare function useToggle<T>(defaultValue: T): [T, Actions<T>];
|
|
9
|
+
declare function useToggle<T, U>(defaultValue: T, reverseValue: U): [T | U, Actions<T | U>];
|
|
10
|
+
export default useToggle;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
// 这是唯一真正执行的实现函数(前面三个仅用于类型提示)。
|
|
4
|
+
// D/R 是实现签名的泛型占位符,用于覆盖上面所有重载情况。
|
|
5
|
+
function useToggle(defaultValue, reverseValue) {
|
|
6
|
+
if (defaultValue === void 0) {
|
|
7
|
+
defaultValue = false;
|
|
8
|
+
}
|
|
9
|
+
var _a = __read(useState(defaultValue), 2),
|
|
10
|
+
state = _a[0],
|
|
11
|
+
setState = _a[1];
|
|
12
|
+
var actions = useMemo(function () {
|
|
13
|
+
// 如果没传 reverseValue,就用 !defaultValue 作为“另一侧值”(常见于 boolean 场景)。
|
|
14
|
+
var reverseValueOrigin = reverseValue === undefined ? !defaultValue : reverseValue;
|
|
15
|
+
// toggle:在 defaultValue 与 reverseValueOrigin 之间切换。
|
|
16
|
+
var toggle = function () {
|
|
17
|
+
return setState(function (v) {
|
|
18
|
+
return v === defaultValue ? reverseValueOrigin : defaultValue;
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
// set:直接设置为传入值,值类型受泛型约束(D | R)。
|
|
22
|
+
var set = function (value) {
|
|
23
|
+
return setState(value);
|
|
24
|
+
};
|
|
25
|
+
// setLeft/setRight:这里语义是“切回左值/右值”。
|
|
26
|
+
var setLeft = function () {
|
|
27
|
+
return setState(defaultValue);
|
|
28
|
+
};
|
|
29
|
+
var setRight = function () {
|
|
30
|
+
return setState(reverseValueOrigin);
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
toggle: toggle,
|
|
34
|
+
set: set,
|
|
35
|
+
setLeft: setLeft,
|
|
36
|
+
setRight: setRight
|
|
37
|
+
};
|
|
38
|
+
}, []);
|
|
39
|
+
return [state, actions];
|
|
40
|
+
}
|
|
41
|
+
export default useToggle;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { isFunction } from '../utils';
|
|
3
|
+
import isDev from '../utils/isDev';
|
|
4
|
+
// 为了在开发阶段做参数校验、打印警告,帮你早点发现错误;生产环境不做这些检查,避免性能和包体积成本。
|
|
5
|
+
var useUnmount = function (fn) {
|
|
6
|
+
if (isDev) {
|
|
7
|
+
if (!isFunction(fn)) {
|
|
8
|
+
console.error("useMount:parameter `fn` expected to be a function,but got \"".concat(typeof fn, "\"."));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
useEffect(function () {
|
|
12
|
+
return function () {
|
|
13
|
+
fn === null || fn === void 0 ? void 0 : fn();
|
|
14
|
+
};
|
|
15
|
+
}, []);
|
|
16
|
+
};
|
|
17
|
+
export default useUnmount;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
|
+
var useUpdate = function () {
|
|
4
|
+
var _a = __read(useState({}), 2),
|
|
5
|
+
setState = _a[1];
|
|
6
|
+
return useCallback(function () {
|
|
7
|
+
return setState({});
|
|
8
|
+
}, []);
|
|
9
|
+
};
|
|
10
|
+
export default useUpdate;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DependencyList, EffectCallback, useEffect, useLayoutEffect } from 'react';
|
|
2
|
+
import type { BasicTarget } from './domTarget';
|
|
3
|
+
declare const createEffectWithTarget: (useEffectType: typeof useEffect | typeof useLayoutEffect) => (effect: EffectCallback, deps: DependencyList, target: BasicTarget<any> | BasicTarget<any>[]) => void;
|
|
4
|
+
export default createEffectWithTarget;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import useUnmount from '../useUnmount';
|
|
3
|
+
import depsAreSame from './depsAreSame';
|
|
4
|
+
import { getTargetElement } from './domTarget';
|
|
5
|
+
// 创建一个 effect 函数,用于在组件渲染时执行副作用,并且可以指定依赖项和目标元素
|
|
6
|
+
var createEffectWithTarget = function (useEffectType) {
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @param effect
|
|
10
|
+
* @param deps
|
|
11
|
+
* @param target target should compare ref.current vs ref.current, dom vs dom, ()=>dom vs ()=>dom
|
|
12
|
+
*/
|
|
13
|
+
var useEffectWithTarget = function (effect, deps, target) {
|
|
14
|
+
var hasInitRef = useRef(false);
|
|
15
|
+
var lastElementRef = useRef([]);
|
|
16
|
+
var lastDepsRef = useRef([]);
|
|
17
|
+
var unLoadRef = useRef();
|
|
18
|
+
useEffectType(function () {
|
|
19
|
+
var _a;
|
|
20
|
+
var targets = Array.isArray(target) ? target : [target];
|
|
21
|
+
var els = targets.map(function (item) {
|
|
22
|
+
return getTargetElement(item);
|
|
23
|
+
});
|
|
24
|
+
// init run
|
|
25
|
+
if (!hasInitRef.current) {
|
|
26
|
+
hasInitRef.current = true;
|
|
27
|
+
lastElementRef.current = els;
|
|
28
|
+
lastDepsRef.current = deps;
|
|
29
|
+
unLoadRef.current = effect();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (els.length !== lastElementRef.current.length || !depsAreSame(els, lastElementRef.current) || !depsAreSame(deps, lastDepsRef.current)) {
|
|
33
|
+
(_a = unLoadRef.current) === null || _a === void 0 ? void 0 : _a.call(unLoadRef);
|
|
34
|
+
lastElementRef.current = els;
|
|
35
|
+
lastDepsRef.current = deps;
|
|
36
|
+
unLoadRef.current = effect();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
useUnmount(function () {
|
|
40
|
+
var _a;
|
|
41
|
+
(_a = unLoadRef.current) === null || _a === void 0 ? void 0 : _a.call(unLoadRef);
|
|
42
|
+
// for react-refresh
|
|
43
|
+
hasInitRef.current = false;
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
return useEffectWithTarget;
|
|
47
|
+
};
|
|
48
|
+
export default createEffectWithTarget;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MutableRefObject } from 'react';
|
|
2
|
+
type TargetValue<T> = T | undefined | null;
|
|
3
|
+
type TargetType = HTMLElement | Element | Window | Document;
|
|
4
|
+
export type BasicTarget<T extends TargetType = Element> = (() => TargetValue<T>) | TargetValue<T> | MutableRefObject<TargetValue<T>>;
|
|
5
|
+
export declare function getTargetElement<T extends TargetType>(target: BasicTarget<T>, defaultElement?: T): TargetValue<T>;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isFunction } from './index';
|
|
2
|
+
import isBrowser from './isBrowser';
|
|
3
|
+
// 获取目标元素
|
|
4
|
+
export function getTargetElement(target, defaultElement) {
|
|
5
|
+
if (!isBrowser) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
if (!target) {
|
|
9
|
+
return defaultElement;
|
|
10
|
+
}
|
|
11
|
+
var targetElement;
|
|
12
|
+
if (isFunction(target)) {
|
|
13
|
+
targetElement = target();
|
|
14
|
+
} else if ('current' in target) {
|
|
15
|
+
targetElement = target.current;
|
|
16
|
+
} else {
|
|
17
|
+
targetElement = target;
|
|
18
|
+
}
|
|
19
|
+
return targetElement;
|
|
20
|
+
}
|