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.
Files changed (311) hide show
  1. package/README.md +65 -0
  2. package/dist/icode-hooks.js +1 -0
  3. package/es/createUpdateEffect/index.d.ts +4 -0
  4. package/es/createUpdateEffect/index.js +22 -0
  5. package/es/index.d.ts +9 -0
  6. package/es/index.js +9 -0
  7. package/es/useBoolean/index.d.ts +8 -0
  8. package/es/useBoolean/index.js +27 -0
  9. package/es/useCreation/index.d.ts +2 -0
  10. package/es/useCreation/index.js +21 -0
  11. package/es/useLatest/index.d.ts +3 -0
  12. package/es/useLatest/index.js +7 -0
  13. package/es/useMemoizedFn/index.d.ts +3 -0
  14. package/es/useMemoizedFn/index.js +31 -0
  15. package/es/useMount/index.d.ts +2 -0
  16. package/es/useMount/index.js +15 -0
  17. package/es/usePrescription/api.d.ts +7 -0
  18. package/es/usePrescription/api.js +17 -0
  19. package/es/usePrescription/index.d.ts +36 -0
  20. package/es/usePrescription/index.js +119 -0
  21. package/es/usePrescription/types.d.ts +15 -0
  22. package/es/usePrescription/types.js +1 -0
  23. package/es/useRequest/index.d.ts +4 -0
  24. package/es/useRequest/index.js +4 -0
  25. package/es/useRequest/routes-doc/use-request/demos/basic/cancel.d.ts +3 -0
  26. package/es/useRequest/routes-doc/use-request/demos/basic/cancel.js +56 -0
  27. package/es/useRequest/routes-doc/use-request/demos/basic/default.d.ts +6 -0
  28. package/es/useRequest/routes-doc/use-request/demos/basic/default.js +30 -0
  29. package/es/useRequest/routes-doc/use-request/demos/basic/lifeCycle.d.ts +3 -0
  30. package/es/useRequest/routes-doc/use-request/demos/basic/lifeCycle.js +55 -0
  31. package/es/useRequest/routes-doc/use-request/demos/basic/manualRun.d.ts +7 -0
  32. package/es/useRequest/routes-doc/use-request/demos/basic/manualRun.js +53 -0
  33. package/es/useRequest/routes-doc/use-request/demos/basic/manualRunAsync.d.ts +7 -0
  34. package/es/useRequest/routes-doc/use-request/demos/basic/manualRunAsync.js +67 -0
  35. package/es/useRequest/routes-doc/use-request/demos/basic/mutate.d.ts +6 -0
  36. package/es/useRequest/routes-doc/use-request/demos/basic/mutate.js +68 -0
  37. package/es/useRequest/routes-doc/use-request/demos/basic/params.d.ts +3 -0
  38. package/es/useRequest/routes-doc/use-request/demos/basic/params.js +44 -0
  39. package/es/useRequest/routes-doc/use-request/demos/basic/refresh.d.ts +6 -0
  40. package/es/useRequest/routes-doc/use-request/demos/basic/refresh.js +35 -0
  41. package/es/useRequest/routes-doc/use-request/demos/cache/cacheKey.d.ts +3 -0
  42. package/es/useRequest/routes-doc/use-request/demos/cache/cacheKey.js +41 -0
  43. package/es/useRequest/routes-doc/use-request/demos/cache/clearCache.d.ts +3 -0
  44. package/es/useRequest/routes-doc/use-request/demos/cache/clearCache.js +80 -0
  45. package/es/useRequest/routes-doc/use-request/demos/cache/params.d.ts +3 -0
  46. package/es/useRequest/routes-doc/use-request/demos/cache/params.js +65 -0
  47. package/es/useRequest/routes-doc/use-request/demos/cache/setCache.d.ts +3 -0
  48. package/es/useRequest/routes-doc/use-request/demos/cache/setCache.js +48 -0
  49. package/es/useRequest/routes-doc/use-request/demos/cache/share.d.ts +3 -0
  50. package/es/useRequest/routes-doc/use-request/demos/cache/share.js +37 -0
  51. package/es/useRequest/routes-doc/use-request/demos/cache/staleTime.d.ts +3 -0
  52. package/es/useRequest/routes-doc/use-request/demos/cache/staleTime.js +43 -0
  53. package/es/useRequest/routes-doc/use-request/demos/debounce/debounce.d.ts +3 -0
  54. package/es/useRequest/routes-doc/use-request/demos/debounce/debounce.js +41 -0
  55. package/es/useRequest/routes-doc/use-request/demos/index/default.d.ts +3 -0
  56. package/es/useRequest/routes-doc/use-request/demos/index/default.js +23 -0
  57. package/es/useRequest/routes-doc/use-request/demos/index/manual.d.ts +7 -0
  58. package/es/useRequest/routes-doc/use-request/demos/index/manual.js +50 -0
  59. package/es/useRequest/routes-doc/use-request/demos/loadingDelay/loadingDelay.d.ts +3 -0
  60. package/es/useRequest/routes-doc/use-request/demos/loadingDelay/loadingDelay.js +29 -0
  61. package/es/useRequest/routes-doc/use-request/demos/polling/polling.d.ts +3 -0
  62. package/es/useRequest/routes-doc/use-request/demos/polling/polling.js +31 -0
  63. package/es/useRequest/routes-doc/use-request/demos/polling/pollingError.d.ts +3 -0
  64. package/es/useRequest/routes-doc/use-request/demos/polling/pollingError.js +37 -0
  65. package/es/useRequest/routes-doc/use-request/demos/ready/manualReady.d.ts +3 -0
  66. package/es/useRequest/routes-doc/use-request/demos/ready/manualReady.js +36 -0
  67. package/es/useRequest/routes-doc/use-request/demos/ready/ready.d.ts +3 -0
  68. package/es/useRequest/routes-doc/use-request/demos/ready/ready.js +28 -0
  69. package/es/useRequest/routes-doc/use-request/demos/refresh/refreshDeps.d.ts +3 -0
  70. package/es/useRequest/routes-doc/use-request/demos/refresh/refreshDeps.js +60 -0
  71. package/es/useRequest/routes-doc/use-request/demos/refreshOnWindowFocus/refreshOnWindowFocus.d.ts +3 -0
  72. package/es/useRequest/routes-doc/use-request/demos/refreshOnWindowFocus/refreshOnWindowFocus.js +18 -0
  73. package/es/useRequest/routes-doc/use-request/demos/retry/retry.d.ts +3 -0
  74. package/es/useRequest/routes-doc/use-request/demos/retry/retry.js +42 -0
  75. package/es/useRequest/routes-doc/use-request/demos/throttle/throttle.d.ts +3 -0
  76. package/es/useRequest/routes-doc/use-request/demos/throttle/throttle.js +41 -0
  77. package/es/useRequest/src/Fetch.d.ts +20 -0
  78. package/es/useRequest/src/Fetch.js +161 -0
  79. package/es/useRequest/src/plugins/useAutoRunPlugin.d.ts +3 -0
  80. package/es/useRequest/src/plugins/useAutoRunPlugin.js +56 -0
  81. package/es/useRequest/src/plugins/useCachePlugin.d.ts +3 -0
  82. package/es/useRequest/src/plugins/useCachePlugin.js +143 -0
  83. package/es/useRequest/src/plugins/useDebouncePlugin.d.ts +3 -0
  84. package/es/useRequest/src/plugins/useDebouncePlugin.js +61 -0
  85. package/es/useRequest/src/plugins/useLoadingDelayPlugin.d.ts +3 -0
  86. package/es/useRequest/src/plugins/useLoadingDelayPlugin.js +40 -0
  87. package/es/useRequest/src/plugins/usePollingPlugin.d.ts +3 -0
  88. package/es/useRequest/src/plugins/usePollingPlugin.js +65 -0
  89. package/es/useRequest/src/plugins/useRefreshOnWindowFocusPlugin.d.ts +3 -0
  90. package/es/useRequest/src/plugins/useRefreshOnWindowFocusPlugin.js +30 -0
  91. package/es/useRequest/src/plugins/useRetryPlugin.d.ts +3 -0
  92. package/es/useRequest/src/plugins/useRetryPlugin.js +45 -0
  93. package/es/useRequest/src/plugins/useThrottlePlugin.d.ts +3 -0
  94. package/es/useRequest/src/plugins/useThrottlePlugin.js +53 -0
  95. package/es/useRequest/src/types.d.ts +73 -0
  96. package/es/useRequest/src/types.js +1 -0
  97. package/es/useRequest/src/useRequest.d.ts +3 -0
  98. package/es/useRequest/src/useRequest.js +14 -0
  99. package/es/useRequest/src/useRequestImplement.d.ts +5 -0
  100. package/es/useRequest/src/useRequestImplement.js +72 -0
  101. package/es/useRequest/src/utils/cache.d.ts +14 -0
  102. package/es/useRequest/src/utils/cache.js +32 -0
  103. package/es/useRequest/src/utils/cachePromise.d.ts +4 -0
  104. package/es/useRequest/src/utils/cachePromise.js +17 -0
  105. package/es/useRequest/src/utils/cacheSubscribe.d.ts +4 -0
  106. package/es/useRequest/src/utils/cacheSubscribe.js +19 -0
  107. package/es/useRequest/src/utils/isDocumentVisible.d.ts +1 -0
  108. package/es/useRequest/src/utils/isDocumentVisible.js +7 -0
  109. package/es/useRequest/src/utils/isOnline.d.ts +1 -0
  110. package/es/useRequest/src/utils/isOnline.js +7 -0
  111. package/es/useRequest/src/utils/limit.d.ts +1 -0
  112. package/es/useRequest/src/utils/limit.js +17 -0
  113. package/es/useRequest/src/utils/subscribeFocus.d.ts +3 -0
  114. package/es/useRequest/src/utils/subscribeFocus.js +27 -0
  115. package/es/useRequest/src/utils/subscribeReVisible.d.ts +3 -0
  116. package/es/useRequest/src/utils/subscribeReVisible.js +21 -0
  117. package/es/useToggle/index.d.ts +10 -0
  118. package/es/useToggle/index.js +41 -0
  119. package/es/useUnmount/index.d.ts +2 -0
  120. package/es/useUnmount/index.js +17 -0
  121. package/es/useUpdate/index.d.ts +2 -0
  122. package/es/useUpdate/index.js +10 -0
  123. package/es/useUpdateEffect/index.d.ts +3 -0
  124. package/es/useUpdateEffect/index.js +3 -0
  125. package/es/utils/createEffectWithTarget.d.ts +4 -0
  126. package/es/utils/createEffectWithTarget.js +48 -0
  127. package/es/utils/depsAreSame.d.ts +2 -0
  128. package/es/utils/depsAreSame.js +8 -0
  129. package/es/utils/depsEqual.d.ts +2 -0
  130. package/es/utils/depsEqual.js +11 -0
  131. package/es/utils/domTarget.d.ts +6 -0
  132. package/es/utils/domTarget.js +20 -0
  133. package/es/utils/getDocumentOrShadow.d.ts +3 -0
  134. package/es/utils/getDocumentOrShadow.js +28 -0
  135. package/es/utils/index.d.ts +6 -0
  136. package/es/utils/index.js +18 -0
  137. package/es/utils/isAppleDevice.d.ts +2 -0
  138. package/es/utils/isAppleDevice.js +3 -0
  139. package/es/utils/isBrowser.d.ts +2 -0
  140. package/es/utils/isBrowser.js +2 -0
  141. package/es/utils/isDev.d.ts +2 -0
  142. package/es/utils/isDev.js +3 -0
  143. package/es/utils/lodash-polyfill.d.ts +2 -0
  144. package/es/utils/lodash-polyfill.js +11 -0
  145. package/es/utils/testingHelpers.d.ts +2 -0
  146. package/es/utils/testingHelpers.js +19 -0
  147. package/es/utils/tests.d.ts +4 -0
  148. package/es/utils/tests.js +12 -0
  149. package/es/utils/useDeepCompareWithTarget.d.ts +4 -0
  150. package/es/utils/useDeepCompareWithTarget.js +14 -0
  151. package/es/utils/useEffectWithTarget.d.ts +2 -0
  152. package/es/utils/useEffectWithTarget.js +5 -0
  153. package/es/utils/useIsomorphicLayoutEffectWithTarget.d.ts +2 -0
  154. package/es/utils/useIsomorphicLayoutEffectWithTarget.js +5 -0
  155. package/es/utils/useLayoutEffectWithTarget.d.ts +2 -0
  156. package/es/utils/useLayoutEffectWithTarget.js +4 -0
  157. package/lib/createUpdateEffect/index.d.ts +4 -0
  158. package/lib/createUpdateEffect/index.js +28 -0
  159. package/lib/index.d.ts +9 -0
  160. package/lib/index.js +69 -0
  161. package/lib/useBoolean/index.d.ts +8 -0
  162. package/lib/useBoolean/index.js +33 -0
  163. package/lib/useCreation/index.d.ts +2 -0
  164. package/lib/useCreation/index.js +28 -0
  165. package/lib/useLatest/index.d.ts +3 -0
  166. package/lib/useLatest/index.js +13 -0
  167. package/lib/useMemoizedFn/index.d.ts +3 -0
  168. package/lib/useMemoizedFn/index.js +40 -0
  169. package/lib/useMount/index.d.ts +2 -0
  170. package/lib/useMount/index.js +23 -0
  171. package/lib/usePrescription/api.d.ts +7 -0
  172. package/lib/usePrescription/api.js +23 -0
  173. package/lib/usePrescription/index.d.ts +36 -0
  174. package/lib/usePrescription/index.js +127 -0
  175. package/lib/usePrescription/types.d.ts +15 -0
  176. package/lib/usePrescription/types.js +5 -0
  177. package/lib/useRequest/index.d.ts +4 -0
  178. package/lib/useRequest/index.js +16 -0
  179. package/lib/useRequest/routes-doc/use-request/demos/basic/cancel.d.ts +3 -0
  180. package/lib/useRequest/routes-doc/use-request/demos/basic/cancel.js +65 -0
  181. package/lib/useRequest/routes-doc/use-request/demos/basic/default.d.ts +6 -0
  182. package/lib/useRequest/routes-doc/use-request/demos/basic/default.js +38 -0
  183. package/lib/useRequest/routes-doc/use-request/demos/basic/lifeCycle.d.ts +3 -0
  184. package/lib/useRequest/routes-doc/use-request/demos/basic/lifeCycle.js +64 -0
  185. package/lib/useRequest/routes-doc/use-request/demos/basic/manualRun.d.ts +7 -0
  186. package/lib/useRequest/routes-doc/use-request/demos/basic/manualRun.js +63 -0
  187. package/lib/useRequest/routes-doc/use-request/demos/basic/manualRunAsync.d.ts +7 -0
  188. package/lib/useRequest/routes-doc/use-request/demos/basic/manualRunAsync.js +77 -0
  189. package/lib/useRequest/routes-doc/use-request/demos/basic/mutate.d.ts +6 -0
  190. package/lib/useRequest/routes-doc/use-request/demos/basic/mutate.js +78 -0
  191. package/lib/useRequest/routes-doc/use-request/demos/basic/params.d.ts +3 -0
  192. package/lib/useRequest/routes-doc/use-request/demos/basic/params.js +53 -0
  193. package/lib/useRequest/routes-doc/use-request/demos/basic/refresh.d.ts +6 -0
  194. package/lib/useRequest/routes-doc/use-request/demos/basic/refresh.js +45 -0
  195. package/lib/useRequest/routes-doc/use-request/demos/cache/cacheKey.d.ts +3 -0
  196. package/lib/useRequest/routes-doc/use-request/demos/cache/cacheKey.js +48 -0
  197. package/lib/useRequest/routes-doc/use-request/demos/cache/clearCache.d.ts +3 -0
  198. package/lib/useRequest/routes-doc/use-request/demos/cache/clearCache.js +87 -0
  199. package/lib/useRequest/routes-doc/use-request/demos/cache/params.d.ts +3 -0
  200. package/lib/useRequest/routes-doc/use-request/demos/cache/params.js +74 -0
  201. package/lib/useRequest/routes-doc/use-request/demos/cache/setCache.d.ts +3 -0
  202. package/lib/useRequest/routes-doc/use-request/demos/cache/setCache.js +55 -0
  203. package/lib/useRequest/routes-doc/use-request/demos/cache/share.d.ts +3 -0
  204. package/lib/useRequest/routes-doc/use-request/demos/cache/share.js +44 -0
  205. package/lib/useRequest/routes-doc/use-request/demos/cache/staleTime.d.ts +3 -0
  206. package/lib/useRequest/routes-doc/use-request/demos/cache/staleTime.js +50 -0
  207. package/lib/useRequest/routes-doc/use-request/demos/debounce/debounce.d.ts +3 -0
  208. package/lib/useRequest/routes-doc/use-request/demos/debounce/debounce.js +48 -0
  209. package/lib/useRequest/routes-doc/use-request/demos/index/default.d.ts +3 -0
  210. package/lib/useRequest/routes-doc/use-request/demos/index/default.js +30 -0
  211. package/lib/useRequest/routes-doc/use-request/demos/index/manual.d.ts +7 -0
  212. package/lib/useRequest/routes-doc/use-request/demos/index/manual.js +60 -0
  213. package/lib/useRequest/routes-doc/use-request/demos/loadingDelay/loadingDelay.d.ts +3 -0
  214. package/lib/useRequest/routes-doc/use-request/demos/loadingDelay/loadingDelay.js +36 -0
  215. package/lib/useRequest/routes-doc/use-request/demos/polling/polling.d.ts +3 -0
  216. package/lib/useRequest/routes-doc/use-request/demos/polling/polling.js +38 -0
  217. package/lib/useRequest/routes-doc/use-request/demos/polling/pollingError.d.ts +3 -0
  218. package/lib/useRequest/routes-doc/use-request/demos/polling/pollingError.js +44 -0
  219. package/lib/useRequest/routes-doc/use-request/demos/ready/manualReady.d.ts +3 -0
  220. package/lib/useRequest/routes-doc/use-request/demos/ready/manualReady.js +43 -0
  221. package/lib/useRequest/routes-doc/use-request/demos/ready/ready.d.ts +3 -0
  222. package/lib/useRequest/routes-doc/use-request/demos/ready/ready.js +35 -0
  223. package/lib/useRequest/routes-doc/use-request/demos/refresh/refreshDeps.d.ts +3 -0
  224. package/lib/useRequest/routes-doc/use-request/demos/refresh/refreshDeps.js +69 -0
  225. package/lib/useRequest/routes-doc/use-request/demos/refreshOnWindowFocus/refreshOnWindowFocus.d.ts +3 -0
  226. package/lib/useRequest/routes-doc/use-request/demos/refreshOnWindowFocus/refreshOnWindowFocus.js +25 -0
  227. package/lib/useRequest/routes-doc/use-request/demos/retry/retry.d.ts +3 -0
  228. package/lib/useRequest/routes-doc/use-request/demos/retry/retry.js +51 -0
  229. package/lib/useRequest/routes-doc/use-request/demos/throttle/throttle.d.ts +3 -0
  230. package/lib/useRequest/routes-doc/use-request/demos/throttle/throttle.js +48 -0
  231. package/lib/useRequest/src/Fetch.d.ts +20 -0
  232. package/lib/useRequest/src/Fetch.js +168 -0
  233. package/lib/useRequest/src/plugins/useAutoRunPlugin.d.ts +3 -0
  234. package/lib/useRequest/src/plugins/useAutoRunPlugin.js +63 -0
  235. package/lib/useRequest/src/plugins/useCachePlugin.d.ts +3 -0
  236. package/lib/useRequest/src/plugins/useCachePlugin.js +150 -0
  237. package/lib/useRequest/src/plugins/useDebouncePlugin.d.ts +3 -0
  238. package/lib/useRequest/src/plugins/useDebouncePlugin.js +67 -0
  239. package/lib/useRequest/src/plugins/useLoadingDelayPlugin.d.ts +3 -0
  240. package/lib/useRequest/src/plugins/useLoadingDelayPlugin.js +46 -0
  241. package/lib/useRequest/src/plugins/usePollingPlugin.d.ts +3 -0
  242. package/lib/useRequest/src/plugins/usePollingPlugin.js +72 -0
  243. package/lib/useRequest/src/plugins/useRefreshOnWindowFocusPlugin.d.ts +3 -0
  244. package/lib/useRequest/src/plugins/useRefreshOnWindowFocusPlugin.js +37 -0
  245. package/lib/useRequest/src/plugins/useRetryPlugin.d.ts +3 -0
  246. package/lib/useRequest/src/plugins/useRetryPlugin.js +51 -0
  247. package/lib/useRequest/src/plugins/useThrottlePlugin.d.ts +3 -0
  248. package/lib/useRequest/src/plugins/useThrottlePlugin.js +59 -0
  249. package/lib/useRequest/src/types.d.ts +73 -0
  250. package/lib/useRequest/src/types.js +5 -0
  251. package/lib/useRequest/src/useRequest.d.ts +3 -0
  252. package/lib/useRequest/src/useRequest.js +21 -0
  253. package/lib/useRequest/src/useRequestImplement.d.ts +5 -0
  254. package/lib/useRequest/src/useRequestImplement.js +80 -0
  255. package/lib/useRequest/src/utils/cache.d.ts +14 -0
  256. package/lib/useRequest/src/utils/cache.js +37 -0
  257. package/lib/useRequest/src/utils/cachePromise.d.ts +4 -0
  258. package/lib/useRequest/src/utils/cachePromise.js +22 -0
  259. package/lib/useRequest/src/utils/cacheSubscribe.d.ts +4 -0
  260. package/lib/useRequest/src/utils/cacheSubscribe.js +24 -0
  261. package/lib/useRequest/src/utils/isDocumentVisible.d.ts +1 -0
  262. package/lib/useRequest/src/utils/isDocumentVisible.js +14 -0
  263. package/lib/useRequest/src/utils/isOnline.d.ts +1 -0
  264. package/lib/useRequest/src/utils/isOnline.js +14 -0
  265. package/lib/useRequest/src/utils/limit.d.ts +1 -0
  266. package/lib/useRequest/src/utils/limit.js +23 -0
  267. package/lib/useRequest/src/utils/subscribeFocus.d.ts +3 -0
  268. package/lib/useRequest/src/utils/subscribeFocus.js +35 -0
  269. package/lib/useRequest/src/utils/subscribeReVisible.d.ts +3 -0
  270. package/lib/useRequest/src/utils/subscribeReVisible.js +28 -0
  271. package/lib/useToggle/index.d.ts +10 -0
  272. package/lib/useToggle/index.js +47 -0
  273. package/lib/useUnmount/index.d.ts +2 -0
  274. package/lib/useUnmount/index.js +25 -0
  275. package/lib/useUpdate/index.d.ts +2 -0
  276. package/lib/useUpdate/index.js +16 -0
  277. package/lib/useUpdateEffect/index.d.ts +3 -0
  278. package/lib/useUpdateEffect/index.js +9 -0
  279. package/lib/utils/createEffectWithTarget.d.ts +4 -0
  280. package/lib/utils/createEffectWithTarget.js +55 -0
  281. package/lib/utils/depsAreSame.d.ts +2 -0
  282. package/lib/utils/depsAreSame.js +14 -0
  283. package/lib/utils/depsEqual.d.ts +2 -0
  284. package/lib/utils/depsEqual.js +17 -0
  285. package/lib/utils/domTarget.d.ts +6 -0
  286. package/lib/utils/domTarget.js +27 -0
  287. package/lib/utils/getDocumentOrShadow.d.ts +3 -0
  288. package/lib/utils/getDocumentOrShadow.js +34 -0
  289. package/lib/utils/index.d.ts +6 -0
  290. package/lib/utils/index.js +26 -0
  291. package/lib/utils/isAppleDevice.d.ts +2 -0
  292. package/lib/utils/isAppleDevice.js +9 -0
  293. package/lib/utils/isBrowser.d.ts +2 -0
  294. package/lib/utils/isBrowser.js +8 -0
  295. package/lib/utils/isDev.d.ts +2 -0
  296. package/lib/utils/isDev.js +9 -0
  297. package/lib/utils/lodash-polyfill.d.ts +2 -0
  298. package/lib/utils/lodash-polyfill.js +23 -0
  299. package/lib/utils/testingHelpers.d.ts +2 -0
  300. package/lib/utils/testingHelpers.js +26 -0
  301. package/lib/utils/tests.d.ts +4 -0
  302. package/lib/utils/tests.js +30 -0
  303. package/lib/utils/useDeepCompareWithTarget.d.ts +4 -0
  304. package/lib/utils/useDeepCompareWithTarget.js +21 -0
  305. package/lib/utils/useEffectWithTarget.d.ts +2 -0
  306. package/lib/utils/useEffectWithTarget.js +12 -0
  307. package/lib/utils/useIsomorphicLayoutEffectWithTarget.d.ts +2 -0
  308. package/lib/utils/useIsomorphicLayoutEffectWithTarget.js +12 -0
  309. package/lib/utils/useLayoutEffectWithTarget.d.ts +2 -0
  310. package/lib/utils/useLayoutEffectWithTarget.js +11 -0
  311. 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,4 @@
1
+ import type { useEffect, useLayoutEffect } from 'react';
2
+ type EffectHookType = typeof useEffect | typeof useLayoutEffect;
3
+ export declare const createUpdateEffect: (hook: EffectHookType) => EffectHookType;
4
+ export default createUpdateEffect;
@@ -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,8 @@
1
+ interface UseBooleanActions {
2
+ state: boolean;
3
+ setTrue: () => void;
4
+ setFalse: () => void;
5
+ toggle: () => void;
6
+ }
7
+ export default function useBoolean(initialValue?: boolean): UseBooleanActions;
8
+ export {};
@@ -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,2 @@
1
+ import type { DependencyList } from 'react';
2
+ export default function useCreation<T>(factory: () => T, deps: DependencyList): T;
@@ -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,3 @@
1
+ import { type MutableRefObject } from 'react';
2
+ declare function useLatest<T>(value: T): MutableRefObject<T>;
3
+ export default useLatest;
@@ -0,0 +1,7 @@
1
+ import { useRef } from 'react';
2
+ function useLatest(value) {
3
+ var ref = useRef(value);
4
+ ref.current = value;
5
+ return ref;
6
+ }
7
+ export default useLatest;
@@ -0,0 +1,3 @@
1
+ type noop = (this: any, ...args: any) => any;
2
+ declare function useMemoizedFn<T extends noop>(fn: T): T;
3
+ export default useMemoizedFn;
@@ -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,2 @@
1
+ declare const useMount: (fn: any) => void;
2
+ export default useMount;
@@ -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,4 @@
1
+ import useRequest from './src/useRequest';
2
+ import { clearCache } from './src/utils/cache';
3
+ export { clearCache };
4
+ export default useRequest;
@@ -0,0 +1,4 @@
1
+ import useRequest from './src/useRequest';
2
+ import { clearCache } from './src/utils/cache';
3
+ export { clearCache };
4
+ export default useRequest;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: () => React.JSX.Element;
3
+ export default _default;
@@ -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,6 @@
1
+ /**
2
+ * title: 读取用户名称
3
+ */
4
+ import React from 'react';
5
+ declare const _default: () => React.JSX.Element;
6
+ export default _default;
@@ -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
+ });
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: () => React.JSX.Element;
3
+ export default _default;