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
package/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# icode-hooks
|
|
2
|
+
|
|
3
|
+
React 业务 Hooks 库,使用 TypeScript 构建,提供完善的类型定义。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add icode-hooks
|
|
9
|
+
# 或
|
|
10
|
+
npm install icode-hooks
|
|
11
|
+
# 或
|
|
12
|
+
yarn add icode-hooks
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
需要 React 16.8+(peer dependency)。
|
|
16
|
+
|
|
17
|
+
## 使用
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
import { useBoolean, useRequest } from 'icode-hooks';
|
|
21
|
+
|
|
22
|
+
function Demo() {
|
|
23
|
+
const [state, { toggle }] = useBoolean(false);
|
|
24
|
+
|
|
25
|
+
const { data, loading } = useRequest(() =>
|
|
26
|
+
fetch('/api/user').then((res) => res.json()),
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<button onClick={toggle}>
|
|
31
|
+
{loading ? 'Loading...' : data?.name ?? 'Click'}
|
|
32
|
+
</button>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 导出
|
|
38
|
+
|
|
39
|
+
| Hook | 说明 |
|
|
40
|
+
|------|------|
|
|
41
|
+
| `useBoolean` | 布尔值状态管理 |
|
|
42
|
+
| `useToggle` | 两值切换 |
|
|
43
|
+
| `useLatest` | 获取最新值引用 |
|
|
44
|
+
| `useMemoizedFn` | 持久化函数引用 |
|
|
45
|
+
| `useUpdate` | 强制组件更新 |
|
|
46
|
+
| `useUpdateEffect` | 跳过首次执行的 useEffect |
|
|
47
|
+
| `useCreation` | 保证只创建一次的工厂函数 |
|
|
48
|
+
| `useRequest` | 异步请求管理 |
|
|
49
|
+
| `usePrescription` | 处方相关业务 Hook |
|
|
50
|
+
|
|
51
|
+
## CDN
|
|
52
|
+
|
|
53
|
+
通过 [unpkg](https://unpkg.com) 引入 UMD 构建(需自行引入 React):
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<script src="https://unpkg.com/icode-hooks@0.3.0/dist/icode-hooks.js"></script>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 文档
|
|
60
|
+
|
|
61
|
+
完整文档与 Demo 见 [GitHub 仓库](https://github.com/catherine-meili/icode-hooks)。
|
|
62
|
+
|
|
63
|
+
## License
|
|
64
|
+
|
|
65
|
+
[MIT](https://github.com/catherine-meili/icode-hooks/blob/main/LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(n,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("React")):"function"==typeof define&&define.amd?define(["React"],t):"object"==typeof exports?exports["icode-hooks"]=t(require("React")):n["icode-hooks"]=t(n.React)}(this,n=>(()=>{"use strict";var t={883(t){t.exports=n}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}r.d=(n,t)=>{for(var e in t)r.o(t,e)&&!r.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),r.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),r.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})};var o={};r.r(o),r.d(o,{useBoolean:()=>d,useCreation:()=>b,useLatest:()=>p,useMemoizedFn:()=>h,usePrescription:()=>pn,useRequest:()=>vn,useToggle:()=>v,useUpdate:()=>y,useUpdateEffect:()=>g});var i=function(){return i=Object.assign||function(n){for(var t,e=1,r=arguments.length;e<r;e++)for(var o in t=arguments[e])Object.prototype.hasOwnProperty.call(t,o)&&(n[o]=t[o]);return n},i.apply(this,arguments)};function u(n,t){var e={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&t.indexOf(r)<0&&(e[r]=n[r]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(n);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(n,r[o])&&(e[r[o]]=n[r[o]])}return e}function c(n,t,e,r){return new(e||(e=Promise))(function(o,i){function u(n){try{a(r.next(n))}catch(n){i(n)}}function c(n){try{a(r.throw(n))}catch(n){i(n)}}function a(n){var t;n.done?o(n.value):(t=n.value,t instanceof e?t:new e(function(n){n(t)})).then(u,c)}a((r=r.apply(n,t||[])).next())})}function a(n,t){var e,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(c){return function(a){return function(c){if(e)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(u=0)),u;)try{if(e=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return u.label++,{value:c[1],done:!1};case 5:u.label++,r=c[1],c=[0];continue;case 7:c=u.ops.pop(),u.trys.pop();continue;default:if(!((o=(o=u.trys).length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){u=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){u.label=c[1];break}if(6===c[0]&&u.label<o[1]){u.label=o[1],o=c;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(c);break}o[2]&&u.ops.pop(),u.trys.pop();continue}c=t.call(n,u)}catch(n){c=[6,n],r=0}finally{e=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,a])}}}function s(n,t){var e="function"==typeof Symbol&&n[Symbol.iterator];if(!e)return n;var r,o,i=e.call(n),u=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)u.push(r.value)}catch(n){o={error:n}}finally{try{r&&!r.done&&(e=i.return)&&e.call(i)}finally{if(o)throw o.error}}return u}function l(n,t,e){if(e||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return n.concat(r||Array.prototype.slice.call(t))}Object.create,Object.create;var f=r(883);function d(n){void 0===n&&(n=!1);var t=s((0,f.useState)(n),2),e=t[0],r=t[1];return{state:e,setTrue:function(){return r(!0)},setFalse:function(){return r(!1)},toggle:function(){return r(function(n){return!n})}}}const v=function(n,t){void 0===n&&(n=!1);var e=s((0,f.useState)(n),2),r=e[0],o=e[1];return[r,(0,f.useMemo)(function(){var e=void 0===t?!n:t;return{toggle:function(){return o(function(t){return t===n?e:n})},set:function(n){return o(n)},setLeft:function(){return o(n)},setRight:function(){return o(e)}}},[])]},p=function(n){var t=(0,f.useRef)(n);return t.current=n,t};const h=function(n){var t=(0,f.useRef)(n);t.current=(0,f.useMemo)(function(){return n},[n]);var e=(0,f.useRef)();return e.current||(e.current=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return console.log(t.current,"fnRef.current"),t.current.apply(this,n)}),e.current},y=function(){var n=s((0,f.useState)({}),2)[1];return(0,f.useCallback)(function(){return n({})},[])};const g=(m=f.useEffect,function(n,t){var e=(0,f.useRef)(!1);m(function(){return function(){e.current=!1}},[]),m(function(){if(e.current)return n();e.current=!0},t)});var m;function b(n,t){var e=(0,f.useRef)({deps:t,obj:void 0,initialized:!1}).current;return!1!==e.initialized&&function(n,t){if(n===t)return!0;for(var e=0;e<n.length;e++)if(!Object.is(n[e],t[e]))return!1;return!0}(e.deps,t)||(e.deps=t,e.obj=n(),e.initialized=!0),e.obj}var w=function(n,t){var e=t.manual,r=t.ready,o=void 0===r||r,i=t.defaultParams,u=void 0===i?[]:i,c=t.refreshDeps,a=void 0===c?[]:c,d=t.refreshDepsAction,v=(0,f.useRef)(!1);return v.current=!1,g(function(){!e&&o&&(v.current=!0,n.run.apply(n,l([],s(u),!1)))},[o]),g(function(){v.current||e||(v.current=!0,console.log("refreshDeps",a,d),d?d():n.refresh())},l([],s(a),!1)),{onBefore:function(){if(!o)return{stopNow:!0}}}};w.onInit=function(n){var t=n.ready,e=void 0===t||t;return{loading:!n.manual&&e}};const O=w,S=function(n){(0,f.useEffect)(function(){return function(){null==n||n()}},[])};var j=new Map,P=new Map,T={},R=function(n,t){return T[n]||(T[n]=[]),T[n].push(t),function(){var e=T[n].indexOf(t);T[n].splice(e,1)}};const x=function(n,t){var e=t.cacheKey,r=t.cacheTime,o=void 0===r?3e5:r,u=t.staleTime,c=void 0===u?0:u,a=t.setCache,d=t.getCache,v=(0,f.useRef)(),p=(0,f.useRef)(),h=function(n,t){a?a(t):function(n,t,e){var r=j.get(n);(null==r?void 0:r.timer)&&clearTimeout(r.timer);var o=void 0;t>-1&&(o=setTimeout(function(){j.delete(n)},t)),j.set(n,i(i({},e),{timer:o}))}(n,o,t),function(n,t){T[n]&&T[n].forEach(function(n){return n(t)})}(n,t.data)},y=function(n,t){return void 0===t&&(t=[]),d?d(t):function(n){return j.get(n)}(n)};return b(function(){if(e){var t=y(e);t&&Object.hasOwnProperty.call(t,"data")&&(n.state.data=t.data,n.state.params=t.params,(-1===c||(new Date).getTime()-t.time<=c)&&(n.state.loading=!1)),v.current=R(e,function(t){n.setState({data:t})})}},[]),S(function(){var n;null===(n=v.current)||void 0===n||n.call(v)}),e?{onBefore:function(n){var t=y(e,n);return console.log("cacheData",t,"74"),t&&Object.hasOwnProperty.call(t,"data")?-1===c||(new Date).getTime()-t.time<=c?{loading:!1,data:null==t?void 0:t.data,error:void 0,returnNow:!0}:{data:null==t?void 0:t.data,error:void 0}:{}},onRequest:function(n,t){var r=function(n){return P.get(n)}(e);return console.log("service",r,t,"cachePlugin"),r&&r!==p.current||(r=n.apply(void 0,l([],s(t),!1)),p.current=r,function(n,t){P.set(n,t),t.then(function(t){return P.delete(n),t}).catch(function(){P.delete(n)})}(e,r)),{servicePromise:r}},onSuccess:function(t,r){var o;console.log("onSuccess",e,t),e&&(null===(o=v.current)||void 0===o||o.call(v),h(e,{data:t,params:r,time:(new Date).getTime()}),v.current=R(e,function(t){console.log("subscribe",t),n.setState({data:t})}))},onMutate:function(t){var r;e&&(null===(r=v.current)||void 0===r||r.call(v),h(e,{data:t,params:n.state.params,time:(new Date).getTime()}),v.current=R(e,function(t){n.setState({data:t})}))}}:{}},E=function(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)},A="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;var C="object"==typeof self&&self&&self.Object===Object&&self;const M=A||C||Function("return this")(),D=function(){return M.Date.now()};var F=/\s/;var N=/^\s+/;const k=function(n){return n?n.slice(0,function(n){for(var t=n.length;t--&&F.test(n.charAt(t)););return t}(n)+1).replace(N,""):n},B=M.Symbol;var H=Object.prototype,L=H.hasOwnProperty,W=H.toString,I=B?B.toStringTag:void 0;var q=Object.prototype.toString;var z=B?B.toStringTag:void 0;const K=function(n){return null==n?void 0===n?"[object Undefined]":"[object Null]":z&&z in Object(n)?function(n){var t=L.call(n,I),e=n[I];try{n[I]=void 0;var r=!0}catch(n){}var o=W.call(n);return r&&(t?n[I]=e:delete n[I]),o}(n):function(n){return q.call(n)}(n)};var U=/^[-+]0x[0-9a-f]+$/i,$=/^0b[01]+$/i,_=/^0o[0-7]+$/i,G=parseInt;const J=function(n){if("number"==typeof n)return n;if(function(n){return"symbol"==typeof n||function(n){return null!=n&&"object"==typeof n}(n)&&"[object Symbol]"==K(n)}(n))return NaN;if(E(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=E(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=k(n);var e=$.test(n);return e||_.test(n)?G(n.slice(2),e?2:8):U.test(n)?NaN:+n};var Q=Math.max,V=Math.min;const X=function(n,t,e){var r,o,i,u,c,a,s=0,l=!1,f=!1,d=!0;if("function"!=typeof n)throw new TypeError("Expected a function");function v(t){var e=r,i=o;return r=o=void 0,s=t,u=n.apply(i,e)}function p(n){var e=n-a;return void 0===a||e>=t||e<0||f&&n-s>=i}function h(){var n=D();if(p(n))return y(n);c=setTimeout(h,function(n){var e=t-(n-a);return f?V(e,i-(n-s)):e}(n))}function y(n){return c=void 0,d&&r?v(n):(r=o=void 0,u)}function g(){var n=D(),e=p(n);if(r=arguments,o=this,a=n,e){if(void 0===c)return function(n){return s=n,c=setTimeout(h,t),l?v(n):u}(a);if(f)return clearTimeout(c),c=setTimeout(h,t),v(a)}return void 0===c&&(c=setTimeout(h,t)),u}return t=J(t)||0,E(e)&&(l=!!e.leading,i=(f="maxWait"in e)?Q(J(e.maxWait)||0,t):i,d="trailing"in e?!!e.trailing:d),g.cancel=function(){void 0!==c&&clearTimeout(c),s=0,r=a=o=c=void 0},g.flush=function(){return void 0===c?u:y(D())},g},Y=function(n,t){var e=t.debounceWait,r=t.debounceLeading,o=t.debounceTrailing,i=t.debounceMaxWait,u=(0,f.useRef)(),c=(0,f.useMemo)(function(){var n={};return void 0!==r&&(n.leading=r),void 0!==o&&(n.trailing=o),void 0!==i&&(n.maxWait=i),n},[r,o,i]);return(0,f.useEffect)(function(){if(e){var t=n.runAsync.bind(n);return u.current=X(function(n){n()},e,c),n.runAsync=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return new Promise(function(e,r){var o;null===(o=u.current)||void 0===o||o.call(u,function(){t.apply(void 0,l([],s(n),!1)).then(e).catch(r)})})},function(){var e;null===(e=u.current)||void 0===e||e.cancel(),n.runAsync=t}}},[e,c]),e?{onCancel:function(){var n;null===(n=u.current)||void 0===n||n.cancel()}}:{}},Z=function(n,t){var e=t.loadingDelay,r=t.ready,o=(0,f.useRef)();if(!e)return{};var i=function(){o.current&&clearTimeout(o.current)};return{onBefore:function(){return i(),console.log("ready",r),!1!==r&&(o.current=setTimeout(function(){n.setState({loading:!0})},e)),{loading:!1}},onFinally:function(){i()},onCancel:function(){i()}}},nn=!("undefined"==typeof window||!window.document||!window.document.createElement);function tn(){return!nn||"hidden"!==document.visibilityState}var en=[];nn&&window.addEventListener("visibilitychange",function(){if(tn())for(var n=0;n<en.length;n++)(0,en[n])()},!1);const rn=function(n,t){var e=t.pollingInterval,r=t.pollingWhenHidden,o=void 0===r||r,i=t.pollingErrorRetryCount,u=void 0===i?-1:i,c=(0,f.useRef)(),a=(0,f.useRef)(),s=(0,f.useRef)(0),l=function(){var n;c.current&&clearTimeout(c.current),null===(n=a.current)||void 0===n||n.call(a)};return g(function(){e||l()},[e]),e?{onBefore:function(){l()},onError:function(){s.current+=1},onSuccess:function(){s.current=0},onFinally:function(){-1===u||-1!==u&&s.current<=u?c.current=setTimeout(function(){var t;o||tn()?n.refresh():a.current=(t=function(){n.refresh()},en.push(t),function(){var n=en.indexOf(t);en.splice(n,1)})},e):s.current=0},onCancel:function(){l()}}:{}};var on=[];if(nn){var un=function(){if(tn()&&(!nn||void 0===navigator.onLine||navigator.onLine))for(var n=0;n<on.length;n++)(0,on[n])()};window.addEventListener("visibilitychange",un,!1),window.addEventListener("focus",un,!1)}const cn=function(n,t){var e=t.refreshOnWindowFocus,r=t.focusTimespan,o=void 0===r?5e3:r,i=(0,f.useRef)(),u=function(){var n;null===(n=i.current)||void 0===n||n.call(i)};return(0,f.useEffect)(function(){if(e){var t=(c=n.refresh.bind(n),a=o,f=!1,function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];f||(f=!0,c.apply(void 0,l([],s(n),!1)),setTimeout(function(){f=!1},a))});i.current=(r=function(){t()},on.push(r),function(){var n=on.indexOf(r);n>-1&&on.splice(n,1)})}var r,c,a,f;return function(){u()}},[e,o]),S(function(){u()}),{}},an=function(n,t){var e=t.retryInterval,r=t.retryCount,o=(0,f.useRef)(),i=(0,f.useRef)(0),u=(0,f.useRef)(!1);return r?{onBefore:function(){u.current||(i.current=0),u.current=!1,o.current&&clearTimeout(o.current)},onSuccess:function(){i.current=0},onError:function(){if(i.current+=1,-1===r||i.current<=r){var t=null!=e?e:Math.min(1e3*Math.pow(2,i.current),3e4);o.current=setTimeout(function(){u.current=!0,n.refresh()},t)}else i.current=0},onCancel:function(){i.current=0,o.current&&clearTimeout(o.current)}}:{}},sn=function(n,t){var e=t.throttleWait,r=t.throttleLeading,o=t.throttleTrailing,i=(0,f.useRef)(),u={};return void 0!==r&&(u.leading=r),void 0!==o&&(u.trailing=o),(0,f.useEffect)(function(){if(e){var t=n.runAsync.bind(n);return i.current=function(n,t,e){var r=!0,o=!0;if("function"!=typeof n)throw new TypeError("Expected a function");return E(e)&&(r="leading"in e?!!e.leading:r,o="trailing"in e?!!e.trailing:o),X(n,t,{leading:r,maxWait:t,trailing:o})}(function(n){n()},e,u),n.runAsync=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return new Promise(function(e,r){var o;null===(o=i.current)||void 0===o||o.call(i,function(){t.apply(void 0,l([],s(n),!1)).then(e).catch(r)})})},function(){var e;n.runAsync=t,null===(e=i.current)||void 0===e||e.cancel()}}},[e,r,o]),e?{onCancel:function(){var n;null===(n=i.current)||void 0===n||n.cancel()}}:{}};var ln=function(){function n(n,t,e,r){void 0===r&&(r={}),this.serviceRef=n,this.options=t,this.subscribe=e,this.initState=r,this.count=0,this.state={loading:!1,params:void 0,data:void 0,error:void 0},this.state=i(i(i({},this.state),{loading:!t.manual}),r)}return n.prototype.setState=function(n){void 0===n&&(n={}),this.state=i(i({},this.state),n),this.subscribe()},n.prototype.runPluginHandler=function(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return this.pluginImpls.map(function(e){var r;return null===(r=e[n])||void 0===r?void 0:r.call.apply(r,l([e],s(t),!1))}).filter(Boolean).reduce(function(n,t){return Object.assign(n,t)},{})},n.prototype.runAsync=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return c(this,void 0,void 0,function(){var t,e,r,o,c,f,d,v,p,h,y,g,m,b,w,O,S,j,P,T,R;return a(this,function(a){switch(a.label){case 0:if(this.count+=1,t=this.count,e=this.runPluginHandler("onBefore",n),r=e.stopNow,o=void 0!==r&&r,c=e.returnNow,f=void 0!==c&&c,d=u(e,["stopNow","returnNow"]),o)return[2,new Promise(function(){})];if(this.setState(i({loading:!0,params:n},d)),f)return[2,Promise.resolve(d.data)];null===(m=(g=this.options).onBefore)||void 0===m||m.call(g,n),a.label=1;case 1:return a.trys.push([1,3,,4]),(v=this.runPluginHandler("onRequest",this.serviceRef.current,n).servicePromise)||(v=(y=this.serviceRef).current.apply(y,l([],s(n),!1))),console.log("servicePromise",v),[4,v];case 2:return p=a.sent(),t!==this.count?[2,new Promise(function(){})]:(this.setState({data:p,error:void 0,loading:!1}),null===(w=(b=this.options).onSuccess)||void 0===w||w.call(b,p,n),this.runPluginHandler("onSuccess",p,n),null===(S=(O=this.options).onFinally)||void 0===S||S.call(O,n,p,void 0),t===this.count&&this.runPluginHandler("onFinally",n,p,void 0),[2,p]);case 3:if(h=a.sent(),t!==this.count)return[2,new Promise(function(){})];throw this.setState({error:h,loading:!1}),null===(P=(j=this.options).onError)||void 0===P||P.call(j,h,n),this.runPluginHandler("onError",h,n),null===(R=(T=this.options).onFinally)||void 0===R||R.call(T,n,void 0,h),t===this.count&&this.runPluginHandler("onFinally",n,void 0,h),h;case 4:return[2]}})})},n.prototype.run=function(){for(var n=this,t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];this.runAsync.apply(this,l([],s(t),!1)).catch(function(t){n.options.onError||console.error(t)})},n.prototype.cancel=function(){this.count+=1,this.setState({loading:!1}),this.runPluginHandler("onCancel")},n.prototype.refresh=function(){this.run.apply(this,l([],s(this.state.params||[]),!1))},n.prototype.refreshAsync=function(){return this.runAsync.apply(this,l([],s(this.state.params||[]),!1))},n.prototype.mutate=function(n){var t="function"==typeof n?n(this.state.data):n;this.runPluginHandler("onMutate",t),this.setState({data:t})},n}();const fn=ln,dn=function(n,t,e){void 0===t&&(t={}),void 0===e&&(e=[]);var r,o=t.manual,c=void 0!==o&&o,a=u(t,["manual"]),d=i({manual:c},a),v=p(n),g=y(),m=b(function(){var n=e.map(function(n){var t;return null===(t=null==n?void 0:n.onInit)||void 0===t?void 0:t.call(n,d)}).filter(Boolean);return new fn(v,d,g,Object.assign.apply(Object,l([{}],s(n),!1)))},[]);return m.options=d,m.pluginImpls=e.map(function(n){return n(m,d)}),r=function(){if(!c){var n=m.state.params||t.defaultParams||[];m.run.apply(m,l([],s(n),!1))}},(0,f.useEffect)(function(){null==r||r()},[]),S(function(){m.cancel()}),{loading:m.state.loading,data:m.state.data,error:m.state.error,params:m.state.params||[],cancel:h(m.cancel.bind(m)),refresh:h(m.refresh.bind(m)),refreshAsync:h(m.refreshAsync.bind(m)),run:h(m.run.bind(m)),runAsync:h(m.runAsync.bind(m)),mutate:h(m.mutate.bind(m))}},vn=function(n,t,e){return dn(n,t,l(l([],s(e||[]),!1),[Y,Z,rn,cn,sn,O,x,an],!1))},pn=function(n,t,e){var r=this;void 0===e&&(e={});var o=e.ready,u=void 0===o||o,s=e.cacheKey,l=vn(function(){return t.getPrescription(n)},i({ready:u&&!!n,refreshDeps:[n,t]},s?{cacheKey:s}:{})),d=l.data,v=l.loading,p=l.error,h=l.refresh,y=l.mutate,g=l.run,m=vn(t.confirmDrug,{manual:!0,onSuccess:function(){y(function(n){return n?i(i({},n),{status:"done"}):n})}}),b=m.loading,w=m.runAsync,O=vn(t.cancelPrescription,{manual:!0,onSuccess:function(){y(function(n){return n?i(i({},n),{status:"cancel"}):n})}}),S=O.loading,j=O.runAsync,P=(0,f.useCallback)(function(t){var e=null!=t?t:n;if(e)return e;console.warn("[usePrescription] missing prescription id")},[n]),T=(0,f.useCallback)(function(n){return c(r,void 0,void 0,function(){var t;return a(this,function(e){switch(e.label){case 0:return(t=P(n))?[4,w(t)]:[2];case 1:return e.sent(),[2]}})})},[w,P]),R=(0,f.useCallback)(function(n){return c(r,void 0,void 0,function(){var t;return a(this,function(e){switch(e.label){case 0:return(t=P(n))?[4,j(t)]:[2];case 1:return e.sent(),[2]}})})},[j,P]);return{prescription:d,loading:v,error:p,refreshing:v,confirming:b,cancelling:S,refresh:h,loadDetail:g,confirmSend:T,cancel:R,mutate:y}};return o})());
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
export var createUpdateEffect = function (hook) {
|
|
3
|
+
return function (effect, deps) {
|
|
4
|
+
var isMounted = useRef(false);
|
|
5
|
+
// hook 传递进来就是useEffect或者useLayoutEffect,所以这里可以调用它 并且返回一个函数,这个函数在组件卸载时调用
|
|
6
|
+
hook(function () {
|
|
7
|
+
return function () {
|
|
8
|
+
isMounted.current = false;
|
|
9
|
+
};
|
|
10
|
+
}, []);
|
|
11
|
+
// 如果组件已经挂载,则执行effect
|
|
12
|
+
hook(function () {
|
|
13
|
+
if (!isMounted.current) {
|
|
14
|
+
// 如果没有挂载说明是初始化第一次 只需要做记录标志位
|
|
15
|
+
isMounted.current = true;
|
|
16
|
+
} else {
|
|
17
|
+
return effect(); // 如果已经挂载,则执行effect
|
|
18
|
+
}
|
|
19
|
+
}, deps);
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export default createUpdateEffect;
|
package/es/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as useBoolean } from './useBoolean';
|
|
2
|
+
export { default as useToggle } from './useToggle';
|
|
3
|
+
export { default as useLatest } from './useLatest';
|
|
4
|
+
export { default as useMemoizedFn } from './useMemoizedFn';
|
|
5
|
+
export { default as useUpdate } from './useUpdate';
|
|
6
|
+
export { default as useUpdateEffect } from './useUpdateEffect';
|
|
7
|
+
export { default as useCreation } from './useCreation';
|
|
8
|
+
export { default as useRequest } from './useRequest';
|
|
9
|
+
export { default as usePrescription } from './usePrescription';
|
package/es/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as useBoolean } from './useBoolean';
|
|
2
|
+
export { default as useToggle } from './useToggle';
|
|
3
|
+
export { default as useLatest } from './useLatest';
|
|
4
|
+
export { default as useMemoizedFn } from './useMemoizedFn';
|
|
5
|
+
export { default as useUpdate } from './useUpdate';
|
|
6
|
+
export { default as useUpdateEffect } from './useUpdateEffect';
|
|
7
|
+
export { default as useCreation } from './useCreation';
|
|
8
|
+
export { default as useRequest } from './useRequest';
|
|
9
|
+
export { default as usePrescription } from './usePrescription';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
export default function useBoolean(initialValue) {
|
|
4
|
+
if (initialValue === void 0) {
|
|
5
|
+
initialValue = false;
|
|
6
|
+
}
|
|
7
|
+
var _a = __read(useState(initialValue), 2),
|
|
8
|
+
state = _a[0],
|
|
9
|
+
setState = _a[1];
|
|
10
|
+
var setTrue = function () {
|
|
11
|
+
return setState(true);
|
|
12
|
+
};
|
|
13
|
+
var setFalse = function () {
|
|
14
|
+
return setState(false);
|
|
15
|
+
};
|
|
16
|
+
var toggle = function () {
|
|
17
|
+
return setState(function (v) {
|
|
18
|
+
return !v;
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
state: state,
|
|
23
|
+
setTrue: setTrue,
|
|
24
|
+
setFalse: setFalse,
|
|
25
|
+
toggle: toggle
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import depsAreSame from '../utils/depsAreSame';
|
|
3
|
+
//
|
|
4
|
+
export default function useCreation(factory, deps) {
|
|
5
|
+
// 使用 useRef 来存储依赖项、对象和初始化状态
|
|
6
|
+
var current = useRef({
|
|
7
|
+
deps: deps,
|
|
8
|
+
// 依赖项
|
|
9
|
+
obj: undefined,
|
|
10
|
+
// 对象
|
|
11
|
+
initialized: false // 初始化状态
|
|
12
|
+
}).current;
|
|
13
|
+
// 如果初始化状态为 false 或者依赖项不相同,则重新创建对象
|
|
14
|
+
if (current.initialized === false || !depsAreSame(current.deps, deps)) {
|
|
15
|
+
current.deps = deps; // 更新依赖项
|
|
16
|
+
current.obj = factory(); // 创建对象
|
|
17
|
+
current.initialized = true; // 更新初始化状态
|
|
18
|
+
}
|
|
19
|
+
// 返回对象
|
|
20
|
+
return current.obj;
|
|
21
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* title: 基础用法
|
|
3
|
+
* desc: useMemoizedFn 与 useCallback 可以实现同样的效果。
|
|
4
|
+
*/
|
|
5
|
+
import { useMemo, useRef } from 'react';
|
|
6
|
+
import { isFunction } from '../utils';
|
|
7
|
+
import isDev from '../utils/isDev';
|
|
8
|
+
function useMemoizedFn(fn) {
|
|
9
|
+
if (isDev) {
|
|
10
|
+
if (!isFunction(fn)) {
|
|
11
|
+
console.error("useMemoizedFn expected parameter is a function,got".concat(typeof fn));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
var fnRef = useRef(fn);
|
|
15
|
+
fnRef.current = useMemo(function () {
|
|
16
|
+
return fn;
|
|
17
|
+
}, [fn]);
|
|
18
|
+
var memoizedFn = useRef();
|
|
19
|
+
if (!memoizedFn.current) {
|
|
20
|
+
memoizedFn.current = function () {
|
|
21
|
+
var args = [];
|
|
22
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
23
|
+
args[_i] = arguments[_i];
|
|
24
|
+
}
|
|
25
|
+
console.log(fnRef.current, 'fnRef.current');
|
|
26
|
+
return fnRef.current.apply(this, args);
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return memoizedFn.current;
|
|
30
|
+
}
|
|
31
|
+
export default useMemoizedFn;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { isFunction } from '../utils';
|
|
3
|
+
import isDev from '../utils/isDev';
|
|
4
|
+
// 为了在开发阶段做参数校验、打印警告,帮你早点发现错误;生产环境不做这些检查,避免性能和包体积成本。
|
|
5
|
+
var useMount = 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
|
+
fn === null || fn === void 0 ? void 0 : fn();
|
|
13
|
+
}, []);
|
|
14
|
+
};
|
|
15
|
+
export default useMount;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Prescription } from './types';
|
|
2
|
+
/** 药房后台接口层(实际项目里换成 umi request / 公共 request) */
|
|
3
|
+
export declare const prescriptionApi: {
|
|
4
|
+
getPrescription(id: string): Promise<Prescription>;
|
|
5
|
+
confirmDrug(id: string): Promise<void>;
|
|
6
|
+
cancelPrescription(id: string): Promise<void>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** 药房后台接口层(实际项目里换成 umi request / 公共 request) */
|
|
2
|
+
export var prescriptionApi = {
|
|
3
|
+
getPrescription: function (id) {
|
|
4
|
+
return Promise.resolve({
|
|
5
|
+
id: id,
|
|
6
|
+
patientName: '张三',
|
|
7
|
+
drugList: [],
|
|
8
|
+
status: 'pending'
|
|
9
|
+
});
|
|
10
|
+
},
|
|
11
|
+
confirmDrug: function (id) {
|
|
12
|
+
return Promise.resolve();
|
|
13
|
+
},
|
|
14
|
+
cancelPrescription: function (id) {
|
|
15
|
+
return Promise.resolve();
|
|
16
|
+
}
|
|
17
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Prescription } from './types';
|
|
2
|
+
export type { DrugItem, Prescription, PrescriptionStatus } from './types';
|
|
3
|
+
export type UsePrescriptionOptions = {
|
|
4
|
+
/** 为 false 时不自动拉详情(仅手动 loadDetail) */
|
|
5
|
+
ready?: boolean;
|
|
6
|
+
/** 与详情共用 cacheKey 时开启 */
|
|
7
|
+
cacheKey?: string;
|
|
8
|
+
};
|
|
9
|
+
export type PrescriptionServices<TPrescription extends Prescription = Prescription> = {
|
|
10
|
+
getPrescription: (id: string) => Promise<TPrescription>;
|
|
11
|
+
confirmDrug: (id: string) => Promise<unknown>;
|
|
12
|
+
cancelPrescription: (id: string) => Promise<unknown>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* 处方详情 + 发药 / 作废(药房后台常见组合)
|
|
16
|
+
*
|
|
17
|
+
* - id 变化自动重新拉详情(refreshDeps)
|
|
18
|
+
* - 发药 / 作废成功后 mutate 乐观更新 status
|
|
19
|
+
*/
|
|
20
|
+
export declare function usePrescription<TPrescription extends Prescription = Prescription>(id: string | undefined, services: PrescriptionServices<TPrescription>, options?: UsePrescriptionOptions): {
|
|
21
|
+
readonly prescription: TPrescription | undefined;
|
|
22
|
+
readonly loading: boolean;
|
|
23
|
+
readonly error: Error | undefined;
|
|
24
|
+
readonly refreshing: boolean;
|
|
25
|
+
readonly confirming: boolean;
|
|
26
|
+
readonly cancelling: boolean;
|
|
27
|
+
/** id 变化或手动刷新详情 */
|
|
28
|
+
readonly refresh: () => void;
|
|
29
|
+
/** 手动按 id 拉详情(列表跳详情等) */
|
|
30
|
+
readonly loadDetail: () => void;
|
|
31
|
+
readonly confirmSend: (targetId?: string) => Promise<void>;
|
|
32
|
+
readonly cancel: (targetId?: string) => Promise<void>;
|
|
33
|
+
/** 本地改详情(乐观更新 / 回滚) */
|
|
34
|
+
readonly mutate: (data?: TPrescription | ((oldData?: TPrescription | undefined) => TPrescription | undefined) | undefined) => void;
|
|
35
|
+
};
|
|
36
|
+
export default usePrescription;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { __assign, __awaiter, __generator } from "tslib";
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import useRequest from '../useRequest';
|
|
4
|
+
/**
|
|
5
|
+
* 处方详情 + 发药 / 作废(药房后台常见组合)
|
|
6
|
+
*
|
|
7
|
+
* - id 变化自动重新拉详情(refreshDeps)
|
|
8
|
+
* - 发药 / 作废成功后 mutate 乐观更新 status
|
|
9
|
+
*/
|
|
10
|
+
export function usePrescription(id, services, options) {
|
|
11
|
+
var _this = this;
|
|
12
|
+
if (options === void 0) {
|
|
13
|
+
options = {};
|
|
14
|
+
}
|
|
15
|
+
var _a = options.ready,
|
|
16
|
+
ready = _a === void 0 ? true : _a,
|
|
17
|
+
cacheKey = options.cacheKey;
|
|
18
|
+
var canFetch = ready && !!id;
|
|
19
|
+
var _b = useRequest(function () {
|
|
20
|
+
return services.getPrescription(id);
|
|
21
|
+
}, __assign({
|
|
22
|
+
// 拉取详情
|
|
23
|
+
ready: canFetch,
|
|
24
|
+
refreshDeps: [id, services]
|
|
25
|
+
}, cacheKey ? {
|
|
26
|
+
cacheKey: cacheKey
|
|
27
|
+
} : {})),
|
|
28
|
+
prescription = _b.data,
|
|
29
|
+
loading = _b.loading,
|
|
30
|
+
error = _b.error,
|
|
31
|
+
refresh = _b.refresh,
|
|
32
|
+
mutate = _b.mutate,
|
|
33
|
+
loadDetail = _b.run;
|
|
34
|
+
// 确认发药
|
|
35
|
+
var _c = useRequest(services.confirmDrug, {
|
|
36
|
+
manual: true,
|
|
37
|
+
onSuccess: function () {
|
|
38
|
+
mutate(function (prev) {
|
|
39
|
+
return prev ? __assign(__assign({}, prev), {
|
|
40
|
+
status: 'done'
|
|
41
|
+
}) : prev;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}),
|
|
45
|
+
confirming = _c.loading,
|
|
46
|
+
confirmRunAsync = _c.runAsync;
|
|
47
|
+
// 作废
|
|
48
|
+
var _d = useRequest(services.cancelPrescription, {
|
|
49
|
+
manual: true,
|
|
50
|
+
onSuccess: function () {
|
|
51
|
+
mutate(function (prev) {
|
|
52
|
+
return prev ? __assign(__assign({}, prev), {
|
|
53
|
+
status: 'cancel'
|
|
54
|
+
}) : prev;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}),
|
|
58
|
+
cancelling = _d.loading,
|
|
59
|
+
cancelRunAsync = _d.runAsync;
|
|
60
|
+
var resolveId = useCallback(function (targetId) {
|
|
61
|
+
var prescriptionId = targetId !== null && targetId !== void 0 ? targetId : id;
|
|
62
|
+
if (!prescriptionId) {
|
|
63
|
+
console.warn('[usePrescription] missing prescription id');
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
return prescriptionId;
|
|
67
|
+
}, [id]);
|
|
68
|
+
var confirmSend = useCallback(
|
|
69
|
+
// 确认发药
|
|
70
|
+
function (targetId) {
|
|
71
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
72
|
+
var prescriptionId;
|
|
73
|
+
return __generator(this, function (_a) {
|
|
74
|
+
switch (_a.label) {
|
|
75
|
+
case 0:
|
|
76
|
+
prescriptionId = resolveId(targetId);
|
|
77
|
+
if (!prescriptionId) return [2 /*return*/];
|
|
78
|
+
return [4 /*yield*/, confirmRunAsync(prescriptionId)];
|
|
79
|
+
case 1:
|
|
80
|
+
_a.sent();
|
|
81
|
+
return [2 /*return*/];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}, [confirmRunAsync, resolveId]);
|
|
86
|
+
var cancel = useCallback(function (targetId) {
|
|
87
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
88
|
+
var prescriptionId;
|
|
89
|
+
return __generator(this, function (_a) {
|
|
90
|
+
switch (_a.label) {
|
|
91
|
+
case 0:
|
|
92
|
+
prescriptionId = resolveId(targetId);
|
|
93
|
+
if (!prescriptionId) return [2 /*return*/];
|
|
94
|
+
return [4 /*yield*/, cancelRunAsync(prescriptionId)];
|
|
95
|
+
case 1:
|
|
96
|
+
_a.sent();
|
|
97
|
+
return [2 /*return*/];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}, [cancelRunAsync, resolveId]);
|
|
102
|
+
return {
|
|
103
|
+
prescription: prescription,
|
|
104
|
+
loading: loading,
|
|
105
|
+
error: error,
|
|
106
|
+
refreshing: loading,
|
|
107
|
+
confirming: confirming,
|
|
108
|
+
cancelling: cancelling,
|
|
109
|
+
/** id 变化或手动刷新详情 */
|
|
110
|
+
refresh: refresh,
|
|
111
|
+
/** 手动按 id 拉详情(列表跳详情等) */
|
|
112
|
+
loadDetail: loadDetail,
|
|
113
|
+
confirmSend: confirmSend,
|
|
114
|
+
cancel: cancel,
|
|
115
|
+
/** 本地改详情(乐观更新 / 回滚) */
|
|
116
|
+
mutate: mutate
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export default usePrescription;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** 处方状态 */
|
|
2
|
+
export type PrescriptionStatus = 'pending' | 'done' | 'cancel';
|
|
3
|
+
/** 药品项 */
|
|
4
|
+
export type DrugItem = {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
quantity: number;
|
|
8
|
+
};
|
|
9
|
+
/** 处方详情 */
|
|
10
|
+
export type Prescription = {
|
|
11
|
+
id: string;
|
|
12
|
+
patientName: string;
|
|
13
|
+
drugList: DrugItem[];
|
|
14
|
+
status: PrescriptionStatus;
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import { message } from 'antd';
|
|
3
|
+
import React, { useState } from 'react';
|
|
4
|
+
import useRequest from '../../../../index';
|
|
5
|
+
function editUsername(username) {
|
|
6
|
+
return new Promise(function (resolve, reject) {
|
|
7
|
+
setTimeout(function () {
|
|
8
|
+
if (Math.random() > 0.5) {
|
|
9
|
+
resolve();
|
|
10
|
+
} else {
|
|
11
|
+
reject(new Error('Failed to modify username'));
|
|
12
|
+
}
|
|
13
|
+
}, 1000);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export default (function () {
|
|
17
|
+
var _a = __read(useState(''), 2),
|
|
18
|
+
state = _a[0],
|
|
19
|
+
setState = _a[1];
|
|
20
|
+
var _b = useRequest(editUsername, {
|
|
21
|
+
manual: true,
|
|
22
|
+
onSuccess: function (result, params) {
|
|
23
|
+
setState('');
|
|
24
|
+
message.success("The username was changed to \"".concat(params[0], "\" !"));
|
|
25
|
+
},
|
|
26
|
+
onError: function (error) {
|
|
27
|
+
message.error(error.message);
|
|
28
|
+
}
|
|
29
|
+
}),
|
|
30
|
+
loading = _b.loading,
|
|
31
|
+
run = _b.run,
|
|
32
|
+
cancel = _b.cancel;
|
|
33
|
+
return React.createElement("div", null, React.createElement("input", {
|
|
34
|
+
onChange: function (e) {
|
|
35
|
+
return setState(e.target.value);
|
|
36
|
+
},
|
|
37
|
+
value: state,
|
|
38
|
+
placeholder: "Please enter username",
|
|
39
|
+
style: {
|
|
40
|
+
width: 240,
|
|
41
|
+
marginRight: 16
|
|
42
|
+
}
|
|
43
|
+
}), React.createElement("button", {
|
|
44
|
+
disabled: loading,
|
|
45
|
+
type: "button",
|
|
46
|
+
onClick: function () {
|
|
47
|
+
return run(state);
|
|
48
|
+
}
|
|
49
|
+
}, loading ? 'Loading' : 'Edit'), React.createElement("button", {
|
|
50
|
+
type: "button",
|
|
51
|
+
onClick: cancel,
|
|
52
|
+
style: {
|
|
53
|
+
marginLeft: 16
|
|
54
|
+
}
|
|
55
|
+
}, "Cancel"));
|
|
56
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* title: 读取用户名称
|
|
3
|
+
*/
|
|
4
|
+
import useRequest from '../../../../index';
|
|
5
|
+
import Mock from 'mockjs';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
function getUsername() {
|
|
8
|
+
return new Promise(function (resolve, reject) {
|
|
9
|
+
setTimeout(function () {
|
|
10
|
+
if (Math.random() > 0.5) {
|
|
11
|
+
resolve(Mock.mock('@name'));
|
|
12
|
+
} else {
|
|
13
|
+
reject(new Error('Failed to get username'));
|
|
14
|
+
}
|
|
15
|
+
}, 1000);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export default (function () {
|
|
19
|
+
var _a = useRequest(getUsername),
|
|
20
|
+
data = _a.data,
|
|
21
|
+
error = _a.error,
|
|
22
|
+
loading = _a.loading;
|
|
23
|
+
if (error) {
|
|
24
|
+
return React.createElement("div", null, error.message);
|
|
25
|
+
}
|
|
26
|
+
if (loading) {
|
|
27
|
+
return React.createElement("div", null, "loading...");
|
|
28
|
+
}
|
|
29
|
+
return React.createElement("div", null, "Username: ", data);
|
|
30
|
+
});
|