@jelper/hooks 0.3.0 → 1.1.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 (81) hide show
  1. package/es/index.js +15 -16
  2. package/es/useAsync.js +54 -14
  3. package/es/useBoolState.js +13 -5
  4. package/es/useCreate.js +6 -0
  5. package/es/useDebounce.js +7 -1
  6. package/es/useIgnoreAbortErrCb.js +16 -0
  7. package/es/useInterval.js +20 -7
  8. package/es/useIsMounted.js +18 -0
  9. package/es/useIsUnmount.js +9 -2
  10. package/es/useMount.js +7 -6
  11. package/es/useOption.js +19 -0
  12. package/es/useResizeObserver.js +25 -14
  13. package/es/useRtCb.js +10 -5
  14. package/es/useRtRef.js +11 -5
  15. package/es/useSafeRunner.js +20 -0
  16. package/es/useThrottle.js +7 -8
  17. package/es/useTimeout.js +24 -19
  18. package/es/useUnmount.js +9 -3
  19. package/es/useUpdateEff.js +17 -0
  20. package/es/useValue.js +26 -0
  21. package/lib/index.js +24 -23
  22. package/lib/useAsync.js +56 -16
  23. package/lib/useBoolState.js +12 -7
  24. package/lib/useCreate.js +6 -0
  25. package/lib/useDebounce.js +7 -1
  26. package/lib/useIgnoreAbortErrCb.js +19 -0
  27. package/lib/useInterval.js +41 -8
  28. package/lib/useIsMounted.js +20 -0
  29. package/lib/useIsUnmount.js +9 -2
  30. package/lib/useMount.js +7 -9
  31. package/lib/useOption.js +33 -0
  32. package/lib/useResizeObserver.js +27 -17
  33. package/lib/useRtCb.js +12 -15
  34. package/lib/useRtRef.js +9 -4
  35. package/lib/useSafeRunner.js +25 -0
  36. package/lib/useThrottle.js +7 -8
  37. package/lib/useTimeout.js +45 -20
  38. package/lib/useUnmount.js +11 -2
  39. package/lib/useUpdateEff.js +19 -0
  40. package/lib/{useRtState.js → useValue.js} +13 -16
  41. package/package.json +11 -5
  42. package/types/index.d.ts +11 -12
  43. package/types/useAsync.d.ts +23 -8
  44. package/types/useBoolState.d.ts +10 -1
  45. package/types/useCreate.d.ts +7 -1
  46. package/types/useDebounce.d.ts +6 -0
  47. package/types/useIgnoreAbortErrCb.d.ts +12 -0
  48. package/types/useInterval.d.ts +5 -1
  49. package/types/useIsMounted.d.ts +8 -0
  50. package/types/useIsUnmount.d.ts +6 -0
  51. package/types/useMount.d.ts +7 -1
  52. package/types/useOption.d.ts +15 -0
  53. package/types/useResizeObserver.d.ts +3 -1
  54. package/types/useRtCb.d.ts +8 -1
  55. package/types/useRtRef.d.ts +8 -1
  56. package/types/useSafeRunner.d.ts +8 -0
  57. package/types/useThrottle.d.ts +6 -7
  58. package/types/useTimeout.d.ts +9 -5
  59. package/types/useUnmount.d.ts +7 -1
  60. package/types/useUpdateEff.d.ts +8 -0
  61. package/types/useValue.d.ts +8 -0
  62. package/es/useListener.js +0 -17
  63. package/es/useParamsState.js +0 -9
  64. package/es/useRtEffect.js +0 -7
  65. package/es/useRtState.js +0 -28
  66. package/es/useSafeCb.js +0 -11
  67. package/es/useSafeState.js +0 -8
  68. package/es/useUpdateEffect.js +0 -12
  69. package/lib/useListener.js +0 -22
  70. package/lib/useParamsState.js +0 -26
  71. package/lib/useRtEffect.js +0 -12
  72. package/lib/useSafeCb.js +0 -20
  73. package/lib/useSafeState.js +0 -13
  74. package/lib/useUpdateEffect.js +0 -15
  75. package/types/useListener.d.ts +0 -2
  76. package/types/useParamsState.d.ts +0 -6
  77. package/types/useRtEffect.d.ts +0 -2
  78. package/types/useRtState.d.ts +0 -6
  79. package/types/useSafeCb.d.ts +0 -2
  80. package/types/useSafeState.d.ts +0 -5
  81. package/types/useUpdateEffect.d.ts +0 -1
package/lib/useTimeout.js CHANGED
@@ -1,39 +1,64 @@
1
1
  "use strict";
2
- /*
2
+ /**
3
3
  * @Author: apathyjade
4
- * @Date: 2023-12-14 16:51:29
4
+ * @Date: 2025-03-19 23:10:13
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2023-12-14 17:15:27
6
+ * @Last Modified time: 2025-05-30 18:24:42
7
7
  */
8
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
9
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
10
+ if (ar || !(i in from)) {
11
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
12
+ ar[i] = from[i];
13
+ }
14
+ }
15
+ return to.concat(ar || Array.prototype.slice.call(from));
16
+ };
8
17
  var __importDefault = (this && this.__importDefault) || function (mod) {
9
18
  return (mod && mod.__esModule) ? mod : { "default": mod };
10
19
  };
11
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.useTimeout = exports.useTimeoutHandler = void 0;
12
22
  var react_1 = require("react");
13
23
  var useRtCb_1 = __importDefault(require("./useRtCb"));
14
- /**
15
- * 使用定时器在指定延迟后执行回调函数
16
- * @param callback - 回调函数
17
- * @param delay - 延迟时间(毫秒)
18
- * @returns clearTimer - 清除定时器的函数
19
- */
20
- var useTimeout = function (callback, delay) {
24
+ var useTimeoutHandler = function () {
21
25
  var timerRef = (0, react_1.useRef)();
22
- /**
23
- * 清除定时器
24
- */
25
26
  var clearTimer = (0, react_1.useCallback)(function () {
26
27
  if (timerRef.current) {
27
- clearTimeout(timerRef.current);
28
+ window.clearTimeout(timerRef.current);
29
+ timerRef.current = undefined;
30
+ }
31
+ }, []);
32
+ var bindTimer = (0, react_1.useCallback)(function (callback, timeout) {
33
+ var arg = [];
34
+ for (var _i = 2; _i < arguments.length; _i++) {
35
+ arg[_i - 2] = arguments[_i];
28
36
  }
37
+ clearTimer();
38
+ timerRef.current = window.setTimeout(function () {
39
+ timerRef.current = undefined;
40
+ callback.apply(void 0, arg);
41
+ }, timeout);
29
42
  }, []);
43
+ (0, react_1.useEffect)(function () { return clearTimer; });
44
+ return [
45
+ bindTimer,
46
+ clearTimer,
47
+ ];
48
+ };
49
+ exports.useTimeoutHandler = useTimeoutHandler;
50
+ var useTimeout = function (callback, timeout) {
51
+ var arg = [];
52
+ for (var _i = 2; _i < arguments.length; _i++) {
53
+ arg[_i - 2] = arguments[_i];
54
+ }
55
+ var _a = (0, exports.useTimeoutHandler)(), bindTimer = _a[0], clearTimer = _a[1];
30
56
  var cb = (0, useRtCb_1.default)(callback);
31
57
  (0, react_1.useEffect)(function () {
32
- timerRef.current = window.setTimeout(cb, delay);
33
- return function () {
34
- clearTimer();
35
- };
36
- }, [delay]);
58
+ bindTimer.apply(void 0, __spreadArray([cb, timeout], arg, false));
59
+ return clearTimer;
60
+ }, __spreadArray([cb, timeout], arg, true));
37
61
  return clearTimer;
38
62
  };
39
- exports.default = useTimeout;
63
+ exports.useTimeout = useTimeout;
64
+ exports.default = exports.useTimeout;
package/lib/useUnmount.js CHANGED
@@ -1,9 +1,18 @@
1
1
  "use strict";
2
+ /**
3
+ * @Author: apathyjade
4
+ * @Date: 2025-03-16 11:35:20
5
+ * @Last Modified by: apathyjade
6
+ * @Last Modified time: 2025-03-18 00:17:09
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  var react_1 = require("react");
13
+ var useRtRef_1 = __importDefault(require("./useRtRef"));
4
14
  var useUnmount = function (cb) {
5
- var ref = (0, react_1.useRef)(cb);
6
- ref.current = cb;
15
+ var ref = (0, useRtRef_1.default)(cb);
7
16
  (0, react_1.useEffect)(function () {
8
17
  return function () {
9
18
  ref.current();
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * @Author: apathyjade
4
+ * @Date: 2025-03-16 11:35:13
5
+ * @Last Modified by: apathyjade
6
+ * @Last Modified time: 2025-05-30 15:51:14
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ var react_1 = require("react");
10
+ var useUpdateEff = function (cb, deps) {
11
+ var ref = (0, react_1.useRef)(false);
12
+ (0, react_1.useEffect)(function () {
13
+ if (ref.current) {
14
+ return cb();
15
+ }
16
+ ref.current = true;
17
+ }, deps);
18
+ };
19
+ exports.default = useUpdateEff;
@@ -11,24 +11,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  var react_1 = require("react");
14
- var useRtCb_1 = __importDefault(require("./useRtCb"));
14
+ var useUpdateEff_1 = __importDefault(require("./useUpdateEff"));
15
15
  var defEqual = function (a, b) { return a === b; };
16
- function useRtState(value, onChange, opts) {
16
+ var useValue = function (value, onChange, opts) {
17
17
  var _a = (opts || {}).isEqual, isEqual = _a === void 0 ? defEqual : _a;
18
18
  var _b = (0, react_1.useState)(value), val = _b[0], setVal = _b[1];
19
- var updateValue = (0, useRtCb_1.default)(function (value) {
20
- setVal(value);
21
- onChange === null || onChange === void 0 ? void 0 : onChange(value);
22
- }, []);
23
- var _c = (0, react_1.useState)(value), oldValue = _c[0], setOldValue = _c[1];
24
- (0, react_1.useEffect)(function () {
25
- if (!isEqual(value, oldValue)) {
26
- setOldValue(value);
27
- if (!isEqual(value, val)) {
28
- updateValue(value);
29
- }
19
+ (0, useUpdateEff_1.default)(function () {
20
+ if (!isEqual(value, val)) {
21
+ onChange === null || onChange === void 0 ? void 0 : onChange(val);
30
22
  }
31
- }, [value, oldValue, val]);
23
+ }, [val]);
24
+ (0, useUpdateEff_1.default)(function () {
25
+ if (!isEqual(value, val)) {
26
+ setVal(value);
27
+ }
28
+ }, [value]);
32
29
  return [val, setVal];
33
- }
34
- exports.default = useRtState;
30
+ };
31
+ exports.default = useValue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jelper/hooks",
3
- "version": "0.3.0",
3
+ "version": "1.1.0",
4
4
  "description": "react hooks helper",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -20,10 +20,16 @@
20
20
  "access": "public"
21
21
  },
22
22
  "devDependencies": {
23
- "@jelper/builder": "0.2.0",
23
+ "@jelper/builder": "1.1.0",
24
24
  "@types/node": "~18.0.0",
25
25
  "@types/react": "~18.2.17",
26
- "@types/lodash-es": "~4.17.8"
26
+ "@types/lodash-es": "~4.17.8",
27
+ "@jest/globals": "~29.7.0",
28
+ "@testing-library/react": "~16.2.0",
29
+ "@testing-library/dom": "~10.4.0",
30
+ "@jest/environment": "~29.7.0",
31
+ "jest-environment-jsdom": "~29.7.0",
32
+ "jsdom": "~26.0.0"
27
33
  },
28
34
  "dependencies": {
29
35
  "react": "~18.2.0",
@@ -32,10 +38,10 @@
32
38
  "author": "apathyjade@outlook.com",
33
39
  "license": "ISC",
34
40
  "scripts": {
35
- "test": "echo \"Error: no test specified\" && exit 1",
41
+ "serve": "jelper serve",
36
42
  "build": "jelper build",
37
43
  "build:debug": "jelper build --debug",
38
44
  "build:help": "jelper build --help",
39
- "serve": "jelper serve"
45
+ "test": "jelper test"
40
46
  }
41
47
  }
package/types/index.d.ts CHANGED
@@ -1,20 +1,19 @@
1
- export { default as useSafeState } from './useSafeState';
2
- export { default as useSafeCb } from './useSafeCb';
1
+ export { default as useBoolState } from './useBoolState';
2
+ export { default as useValue } from './useValue';
3
+ export { default as useOption } from './useOption';
3
4
  export { default as useRtRef } from './useRtRef';
4
- export { default as useRtState } from './useRtState';
5
5
  export { default as useRtCb } from './useRtCb';
6
- export { default as useRtEffect } from './useRtEffect';
7
- export { default as useBoolState } from './useBoolState';
8
- export { default as useParamsState } from './useParamsState';
9
- export { default as useUpdateEffect } from './useUpdateEffect';
6
+ export { default as useUpdateEff } from './useUpdateEff';
7
+ export { default as useIsMounted } from './useIsMounted';
10
8
  export { default as useIsUnmount } from './useIsUnmount';
11
9
  export { default as useCreate } from './useCreate';
12
10
  export { default as useMount } from './useMount';
13
11
  export { default as useUnmount } from './useUnmount';
14
- export { default as useThrottle } from './useThrottle';
12
+ export { default as useIgnoreAbortErrCb } from './useIgnoreAbortErrCb';
15
13
  export { default as useDebounce } from './useDebounce';
14
+ export { default as useThrottle } from './useThrottle';
15
+ export { default as useSafeRunner } from './useSafeRunner';
16
16
  export { default as useAsync } from './useAsync';
17
- export { default as useTimeout } from './useTimeout';
18
- export { default as useInterval } from './useInterval';
19
- export { default as useListener } from './useListener';
20
- export { default as useResizeObserver } from './useResizeObserver';
17
+ export { default as useTimeout, useTimeoutHandler } from './useTimeout';
18
+ export { default as useInterval, useIntervalHandler } from './useInterval';
19
+ export { default as useResizeObserver, useResizeObserverHandler } from './useResizeObserver';
@@ -1,13 +1,28 @@
1
- interface Opt<T extends (...arg: any) => any, R> {
2
- defParam?: Parameters<T>;
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-18 23:44:38
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-05-29 17:58:54
6
+ */
7
+ type Parameter<T extends (p: any) => any> = Parameters<T>[0];
8
+ interface Opt<T extends (p: any) => any, R> {
9
+ defParam?: Parameter<T>;
3
10
  immediate?: boolean;
4
11
  format?: (p: ReturnType<T>) => R;
5
12
  catchParam?: boolean;
13
+ onAbort?: (this: AbortSignal, ev: Event) => any;
6
14
  }
7
- declare const useAsync: <T extends (...arg: any) => Promise<any>, R extends Object>(asyncFn: T, opt?: Opt<T, R>) => {
8
- data: R | null | undefined;
9
- run: ReturnFn<(runParam?: Partial<Parameters<T>>) => Promise<void>>;
10
- loading: boolean | undefined;
11
- error: null | undefined;
12
- };
15
+ declare const useAsync: <T extends (p: any, opt?: {
16
+ signal: AbortController['signal'];
17
+ }) => Promise<any>, R = any>(asyncFn: T, opt?: Opt<T, R>) => [
18
+ R | undefined,
19
+ {
20
+ run: (runParam?: Partial<Parameter<T>>) => Promise<void>;
21
+ refresh: () => Promise<void>;
22
+ loading: boolean;
23
+ error?: Error;
24
+ param: Partial<Parameter<T>>;
25
+ controller: AbortController | undefined;
26
+ }
27
+ ];
13
28
  export default useAsync;
@@ -1,2 +1,11 @@
1
- declare const useBoolState: (value: boolean) => (boolean | ((switchValue?: React.SetStateAction<boolean>) => void) | undefined)[];
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 11:16:34
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-05-29 18:08:43
6
+ */
7
+ declare const useBoolState: (value: boolean) => [
8
+ boolean,
9
+ (val?: boolean) => void
10
+ ];
2
11
  export default useBoolState;
@@ -1,2 +1,8 @@
1
- declare const useCreate: (cb: Function) => void;
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 11:34:59
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-03-19 22:53:33
6
+ */
7
+ declare const useCreate: (cb: () => void) => void;
2
8
  export default useCreate;
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-19 22:55:14
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-05-29 18:56:32
6
+ */
1
7
  import { DebounceSettings, DebouncedFunc } from 'lodash-es';
2
8
  declare const useDebounce: <T extends (...args: any) => any>(cb: T, wait?: number, opts?: DebounceSettings) => DebouncedFunc<T>;
3
9
  export default useDebounce;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-19 22:28:14
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-03-19 22:57:23
6
+ */
7
+ /// <reference types="react" />
8
+ interface Opts<T> {
9
+ onAbort: (err: Error) => T;
10
+ }
11
+ declare const useIgnoreAbortErrCb: <T = any>(cb: (err: Error) => T, deps?: import("react").DependencyList, opts?: Opts<T>) => (err: Error) => T | undefined;
12
+ export default useIgnoreAbortErrCb;
@@ -1,2 +1,6 @@
1
- declare const useInterval: (callback: DefFn, delay: number) => () => void;
1
+ export declare const useIntervalHandler: () => [
2
+ (callback: Function, timeout?: number, ...arg: any[]) => void,
3
+ () => void
4
+ ];
5
+ export declare const useInterval: (callback: Function, timeout?: number, ...arg: any[]) => (() => void);
2
6
  export default useInterval;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 21:34:27
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-03-16 21:37:21
6
+ */
7
+ declare const useIsMounted: () => (() => boolean);
8
+ export default useIsMounted;
@@ -1,2 +1,8 @@
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 21:33:24
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-05-29 20:15:50
6
+ */
1
7
  declare const useIsUnmount: () => (() => boolean);
2
8
  export default useIsUnmount;
@@ -1,2 +1,8 @@
1
- declare const useMount: (cb: Function) => void;
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-18 00:21:16
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-03-18 00:21:16
6
+ */
7
+ declare const useMount: (cb: () => void) => void;
2
8
  export default useMount;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 11:35:37
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-03-16 21:31:54
6
+ */
7
+ declare const useOption: <T extends {}>(defOpt?: Partial<T>) => [
8
+ Partial<T>,
9
+ {
10
+ reset: () => void;
11
+ setOption: React.Dispatch<React.SetStateAction<Partial<T>>>;
12
+ update: React.Dispatch<React.SetStateAction<Partial<T>>>;
13
+ }
14
+ ];
15
+ export default useOption;
@@ -1 +1,3 @@
1
- export default function useResizeObserver(dom: HTMLElement, cb: (dom: ResizeObserverEntry) => void): (() => void)[];
1
+ export declare const useResizeObserverHandler: () => ((target: HTMLElement, cb: (dom: ResizeObserverEntry) => void) => void)[];
2
+ export declare const useResizeObserver: <T extends HTMLElement>(domRef: React.RefObject<T>, cb: (entry: ResizeObserverEntry) => void) => () => void;
3
+ export default useResizeObserver;
@@ -1,2 +1,9 @@
1
- declare const useRtCb: <T extends DefFn, D extends any[]>(cb: T, deps?: D) => ReturnFn<T>;
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-17 00:22:11
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-03-17 00:22:56
6
+ */
7
+ import { DependencyList } from 'react';
8
+ declare const useRtCb: <T extends Function>(cb: T, deps?: DependencyList) => T;
2
9
  export default useRtCb;
@@ -1,2 +1,9 @@
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 22:19:57
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-05-30 15:05:26
6
+ */
1
7
  /// <reference types="react" />
2
- export default function useRtRef<T>(val: T): import("react").MutableRefObject<T | undefined>;
8
+ declare const useRtRef: <T>(val: T) => import("react").MutableRefObject<T>;
9
+ export default useRtRef;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 11:36:09
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-03-19 22:41:39
6
+ */
7
+ declare const useSafeRunner: () => (cb: () => void, unmountCb?: () => void) => void;
8
+ export default useSafeRunner;
@@ -1,10 +1,9 @@
1
- import { ThrottleSettings } from 'lodash-es';
2
1
  /**
3
- * 用于节流函数的钩子函数
4
- * @param cb - 要节流的函数
5
- * @param wait - 节流延迟时间,默认为0
6
- * @param opts - 节流选项对象,默认为{}
7
- * @returns 节流函数
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-19 22:55:28
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-05-30 15:31:34
8
6
  */
9
- declare const useThrottle: <T extends (...args: any) => any>(cb: T, wait?: number, opts?: ThrottleSettings) => import("lodash-es").DebouncedFunc<(...arg: Parameters<T>) => void>;
7
+ import { ThrottleSettings, DebouncedFunc } from 'lodash-es';
8
+ declare const useThrottle: <T extends (...args: any) => any>(cb: T, wait?: number, opts?: ThrottleSettings) => DebouncedFunc<T>;
10
9
  export default useThrottle;
@@ -1,8 +1,12 @@
1
1
  /**
2
- * 使用定时器在指定延迟后执行回调函数
3
- * @param callback - 回调函数
4
- * @param delay - 延迟时间(毫秒)
5
- * @returns clearTimer - 清除定时器的函数
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-19 23:10:13
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-05-30 18:24:42
6
6
  */
7
- declare const useTimeout: (callback: DefFn, delay: number) => () => void;
7
+ export declare const useTimeoutHandler: () => [
8
+ (callback: Function, timeout?: number, ...arg: any[]) => void,
9
+ () => void
10
+ ];
11
+ export declare const useTimeout: (callback: Function, timeout?: number, ...arg: any[]) => () => void;
8
12
  export default useTimeout;
@@ -1,2 +1,8 @@
1
- declare const useUnmount: (cb: Function) => void;
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 11:35:20
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-03-18 00:17:09
6
+ */
7
+ declare const useUnmount: (cb: () => void) => void;
2
8
  export default useUnmount;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @Author: apathyjade
3
+ * @Date: 2025-03-16 11:35:13
4
+ * @Last Modified by: apathyjade
5
+ * @Last Modified time: 2025-05-30 15:51:14
6
+ */
7
+ declare const useUpdateEff: (cb: React.EffectCallback, deps?: React.DependencyList) => void;
8
+ export default useUpdateEff;
@@ -0,0 +1,8 @@
1
+ interface Options<T> {
2
+ isEqual?: (a: T, b: T) => boolean;
3
+ }
4
+ declare const useValue: <T = any>(value: T, onChange?: (value: T) => void, opts?: Options<T>) => [
5
+ T,
6
+ React.Dispatch<React.SetStateAction<T>>
7
+ ];
8
+ export default useValue;
package/es/useListener.js DELETED
@@ -1,17 +0,0 @@
1
- import { useCallback } from 'react';
2
- import useRtCb from './useRtCb';
3
- import useRtEffect from './useRtEffect';
4
- const useListener = (type, listener, options) => {
5
- const cb = useRtCb(listener);
6
- const remove = useCallback(() => {
7
- window.removeEventListener(type, cb);
8
- }, []);
9
- useRtEffect(() => {
10
- window.addEventListener(type, cb, options);
11
- return () => {
12
- window.removeEventListener(type, cb);
13
- };
14
- });
15
- return remove;
16
- };
17
- export default useListener;
@@ -1,9 +0,0 @@
1
- import { useCallback } from 'react';
2
- import useSafeState from './useSafeState';
3
- export default function useParamsState(defData) {
4
- const [data, setData] = useSafeState(defData);
5
- const update = useCallback((params) => {
6
- setData((oldVal) => (Object.assign(Object.assign({}, (oldVal || {})), params)));
7
- }, []);
8
- return [data, update, setData];
9
- }
package/es/useRtEffect.js DELETED
@@ -1,7 +0,0 @@
1
- import { useEffect } from 'react';
2
- import useRtCb from './useRtCb';
3
- const useRtEffect = (cb, deps) => {
4
- const rtCb = useRtCb(cb, deps);
5
- useEffect(rtCb, [rtCb]);
6
- };
7
- export default useRtEffect;
package/es/useRtState.js DELETED
@@ -1,28 +0,0 @@
1
- /*
2
- * @Author: jade <apathyjade@outlook.com>
3
- * @Version: 0.0.1
4
- * @Date: 2023-04-05 14:39:52
5
- * @Last Modified by: jade
6
- * @Last Modified Time: 2023-04-05 14:39:52
7
- */
8
- import { useState, useEffect } from 'react';
9
- import useRtCb from './useRtCb';
10
- const defEqual = (a, b) => a === b;
11
- export default function useRtState(value, onChange, opts) {
12
- const { isEqual = defEqual } = opts || {};
13
- const [val, setVal] = useState(value);
14
- const updateValue = useRtCb((value) => {
15
- setVal(value);
16
- onChange === null || onChange === void 0 ? void 0 : onChange(value);
17
- }, []);
18
- const [oldValue, setOldValue] = useState(value);
19
- useEffect(() => {
20
- if (!isEqual(value, oldValue)) {
21
- setOldValue(value);
22
- if (!isEqual(value, val)) {
23
- updateValue(value);
24
- }
25
- }
26
- }, [value, oldValue, val]);
27
- return [val, setVal];
28
- }
package/es/useSafeCb.js DELETED
@@ -1,11 +0,0 @@
1
- import { useCallback } from 'react';
2
- import useIsUnmount from './useIsUnmount';
3
- const useSafeCb = (cb, deps) => {
4
- const isUnmount = useIsUnmount();
5
- return useCallback((...arg) => {
6
- if (!isUnmount()) {
7
- return cb(...arg);
8
- }
9
- }, deps || []);
10
- };
11
- export default useSafeCb;
@@ -1,8 +0,0 @@
1
- import { useState } from 'react';
2
- import useSafeCb from './useSafeCb';
3
- const useSafeState = (value) => {
4
- const [state, setState] = useState(value);
5
- const setCb = useSafeCb(setState);
6
- return [state, setCb];
7
- };
8
- export default useSafeState;
@@ -1,12 +0,0 @@
1
- import { useRef, useEffect } from 'react';
2
- export default function useUpdateEffect(cb, deps) {
3
- const ref = useRef(true);
4
- useEffect(() => {
5
- if (ref.current) {
6
- ref.current = false;
7
- return;
8
- }
9
- return cb();
10
- }, deps);
11
- }
12
- ;
@@ -1,22 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var react_1 = require("react");
7
- var useRtCb_1 = __importDefault(require("./useRtCb"));
8
- var useRtEffect_1 = __importDefault(require("./useRtEffect"));
9
- var useListener = function (type, listener, options) {
10
- var cb = (0, useRtCb_1.default)(listener);
11
- var remove = (0, react_1.useCallback)(function () {
12
- window.removeEventListener(type, cb);
13
- }, []);
14
- (0, useRtEffect_1.default)(function () {
15
- window.addEventListener(type, cb, options);
16
- return function () {
17
- window.removeEventListener(type, cb);
18
- };
19
- });
20
- return remove;
21
- };
22
- exports.default = useListener;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- var react_1 = require("react");
18
- var useSafeState_1 = __importDefault(require("./useSafeState"));
19
- function useParamsState(defData) {
20
- var _a = (0, useSafeState_1.default)(defData), data = _a[0], setData = _a[1];
21
- var update = (0, react_1.useCallback)(function (params) {
22
- setData(function (oldVal) { return (__assign(__assign({}, (oldVal || {})), params)); });
23
- }, []);
24
- return [data, update, setData];
25
- }
26
- exports.default = useParamsState;