@jelper/hooks 1.0.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.
package/es/index.js CHANGED
@@ -6,10 +6,10 @@ export { default as useOption } from './useOption';
6
6
  export { default as useRtRef } from './useRtRef';
7
7
  export { default as useRtCb } from './useRtCb';
8
8
  // 特殊 Effect
9
- export { default as useUpdateEffect } from './useUpdateEff';
9
+ export { default as useUpdateEff } from './useUpdateEff';
10
10
  // 模拟生命周期
11
11
  export { default as useIsMounted } from './useIsMounted';
12
- export { default as useIsUnmount } from './useIsUnmounted';
12
+ export { default as useIsUnmount } from './useIsUnmount';
13
13
  export { default as useCreate } from './useCreate';
14
14
  export { default as useMount } from './useMount';
15
15
  export { default as useUnmount } from './useUnmount';
@@ -19,8 +19,9 @@ export { default as useIgnoreAbortErrCb } from './useIgnoreAbortErrCb';
19
19
  export { default as useDebounce } from './useDebounce';
20
20
  export { default as useThrottle } from './useThrottle';
21
21
  // 使用异步
22
+ export { default as useSafeRunner } from './useSafeRunner';
22
23
  export { default as useAsync } from './useAsync';
23
24
  // 浏览器api
24
- export { default as useTimeout } from './useTimeout';
25
- export { default as useInterval } from './useInterval';
26
- export { default as useResizeObserver } from './useResizeObserver';
25
+ export { default as useTimeout, useTimeoutHandler } from './useTimeout';
26
+ export { default as useInterval, useIntervalHandler } from './useInterval';
27
+ export { default as useResizeObserver, useResizeObserverHandler } from './useResizeObserver';
package/es/useAsync.js CHANGED
@@ -2,12 +2,12 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-18 23:44:38
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 22:53:22
5
+ * @Last Modified time: 2025-05-29 17:58:54
6
6
  */
7
7
  import { useEffect, useState } from 'react';
8
8
  import useRtCb from './useRtCb';
9
9
  import useCreate from './useCreate';
10
- import useIsUnmounted from './useIsUnmounted';
10
+ import useIsUnmounted from './useIsUnmount';
11
11
  import useUnmount from './useUnmount';
12
12
  const defOpt = {
13
13
  immediate: false,
@@ -68,6 +68,6 @@ const useAsync = (asyncFn, opt = defOpt) => {
68
68
  controller.abort();
69
69
  }
70
70
  });
71
- return [data, { run, refresh, loading, error, param }];
71
+ return [data, { run, refresh, loading, error, param, controller }];
72
72
  };
73
73
  export default useAsync;
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-16 11:16:34
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-16 11:21:54
5
+ * @Last Modified time: 2025-05-29 18:08:43
6
6
  */
7
7
  import { useState, useCallback } from 'react';
8
8
  const useBoolState = (value) => {
package/es/useDebounce.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-19 22:55:14
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 22:55:14
5
+ * @Last Modified time: 2025-05-29 18:56:32
6
6
  */
7
7
  import { debounce } from 'lodash-es';
8
8
  import { useMemo } from 'react';
@@ -13,6 +13,6 @@ const useDebounce = (cb, wait, opts) => {
13
13
  return debounce((...arg) => {
14
14
  rtCb(...arg);
15
15
  }, wait, opts);
16
- }, []);
16
+ }, [wait, opts]);
17
17
  };
18
18
  export default useDebounce;
package/es/useInterval.js CHANGED
@@ -2,10 +2,11 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2023-12-14 16:51:29
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 23:11:26
5
+ * @Last Modified time: 2025-05-30 18:24:00
6
6
  */
7
7
  import { useCallback, useEffect, useRef } from 'react';
8
- const useInterval = () => {
8
+ import useRtCb from './useRtCb';
9
+ export const useIntervalHandler = () => {
9
10
  const timerRef = useRef();
10
11
  const clearTimer = useCallback(() => {
11
12
  if (timerRef.current) {
@@ -16,7 +17,6 @@ const useInterval = () => {
16
17
  const bindTimer = useCallback((callback, timeout, ...arg) => {
17
18
  clearTimer();
18
19
  timerRef.current = window.setInterval(() => {
19
- timerRef.current = undefined;
20
20
  callback(...arg);
21
21
  }, timeout);
22
22
  }, []);
@@ -26,4 +26,13 @@ const useInterval = () => {
26
26
  clearTimer,
27
27
  ];
28
28
  };
29
+ export const useInterval = (callback, timeout, ...arg) => {
30
+ const [bindTimer, clearTimer] = useIntervalHandler();
31
+ const cb = useRtCb(callback);
32
+ useEffect(() => {
33
+ bindTimer(cb, timeout, ...arg);
34
+ return clearTimer;
35
+ }, [cb, timeout, ...arg]);
36
+ return clearTimer;
37
+ };
29
38
  export default useInterval;
@@ -2,16 +2,17 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-16 21:33:24
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-16 21:35:46
5
+ * @Last Modified time: 2025-05-29 20:15:50
6
6
  */
7
7
  import { useCallback, useEffect, useRef } from 'react';
8
- const useIsUnmounted = () => {
9
- const ref = useRef(false);
8
+ const useIsUnmount = () => {
9
+ const ref = useRef(true);
10
10
  useEffect(() => {
11
+ ref.current = false;
11
12
  return () => {
12
13
  ref.current = true;
13
14
  };
14
15
  }, []);
15
16
  return useCallback(() => ref.current, []);
16
17
  };
17
- export default useIsUnmounted;
18
+ export default useIsUnmount;
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2023-11-24 10:52:51
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 23:17:45
5
+ * @Last Modified time: 2025-05-30 14:35:56
6
6
  */
7
7
  import { useCallback, useEffect } from 'react';
8
8
  let resizeObserver = null;
@@ -24,6 +24,9 @@ const observe = (target, cb) => {
24
24
  if (!resizeObserver) {
25
25
  init();
26
26
  }
27
+ if (!target) {
28
+ return;
29
+ }
27
30
  observeCatch === null || observeCatch === void 0 ? void 0 : observeCatch.set(target, cb);
28
31
  resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(target);
29
32
  };
@@ -31,20 +34,28 @@ const unobserve = (target) => {
31
34
  if (!resizeObserver) {
32
35
  init();
33
36
  }
37
+ if (!target) {
38
+ return;
39
+ }
34
40
  resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.unobserve(target);
35
41
  observeCatch === null || observeCatch === void 0 ? void 0 : observeCatch.delete(target);
36
42
  };
37
- export default function useResizeObserver(dom, cb) {
38
- const selfObserve = useCallback(() => {
39
- observe(dom, cb);
40
- }, [dom, cb]);
43
+ export const useResizeObserverHandler = () => {
44
+ return [observe, unobserve];
45
+ };
46
+ export const useResizeObserver = (domRef, cb) => {
41
47
  const selfUnobserve = useCallback(() => {
42
- unobserve(dom);
43
- }, [dom]);
48
+ if (domRef.current) {
49
+ unobserve(domRef.current);
50
+ }
51
+ }, [domRef.current]);
44
52
  useEffect(() => {
53
+ if (!domRef.current)
54
+ return;
55
+ const dom = domRef.current;
45
56
  observe(dom, cb);
46
57
  return () => unobserve(dom);
47
- }, [dom, cb]);
48
- return [selfObserve, selfUnobserve];
49
- }
50
- ;
58
+ }, [domRef.current, cb]);
59
+ return selfUnobserve;
60
+ };
61
+ export default useResizeObserver;
package/es/useRtRef.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-16 22:19:57
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-17 00:10:45
5
+ * @Last Modified time: 2025-05-30 15:05:26
6
6
  */
7
7
  import { useRef } from 'react';
8
8
  const useRtRef = (val) => {
@@ -5,7 +5,7 @@
5
5
  * @Last Modified time: 2025-03-19 22:41:39
6
6
  */
7
7
  import { useCallback } from 'react';
8
- import useIsUnmount from "./useIsUnmounted";
8
+ import useIsUnmount from "./useIsUnmount";
9
9
  const useSafeRunner = () => {
10
10
  const isUnmount = useIsUnmount();
11
11
  return useCallback((cb, unmountCb) => {
package/es/useThrottle.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-19 22:55:28
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 22:55:48
5
+ * @Last Modified time: 2025-05-30 15:31:34
6
6
  */
7
7
  import { throttle } from 'lodash-es';
8
8
  import { useMemo } from 'react';
@@ -13,6 +13,6 @@ const useThrottle = (cb, wait, opts) => {
13
13
  return throttle((...arg) => {
14
14
  rtCb(...arg);
15
15
  }, wait, opts);
16
- }, []);
16
+ }, [wait, opts]);
17
17
  };
18
18
  export default useThrottle;
package/es/useTimeout.js CHANGED
@@ -2,10 +2,11 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-19 23:10:13
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 23:10:13
5
+ * @Last Modified time: 2025-05-30 18:24:42
6
6
  */
7
7
  import { useCallback, useEffect, useRef } from 'react';
8
- const useTimeout = () => {
8
+ import useRtCb from './useRtCb';
9
+ export const useTimeoutHandler = () => {
9
10
  const timerRef = useRef();
10
11
  const clearTimer = useCallback(() => {
11
12
  if (timerRef.current) {
@@ -26,4 +27,13 @@ const useTimeout = () => {
26
27
  clearTimer,
27
28
  ];
28
29
  };
30
+ export const useTimeout = (callback, timeout, ...arg) => {
31
+ const [bindTimer, clearTimer] = useTimeoutHandler();
32
+ const cb = useRtCb(callback);
33
+ useEffect(() => {
34
+ bindTimer(cb, timeout, ...arg);
35
+ return clearTimer;
36
+ }, [cb, timeout, ...arg]);
37
+ return clearTimer;
38
+ };
29
39
  export default useTimeout;
@@ -2,10 +2,10 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-16 11:35:13
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-16 11:35:13
5
+ * @Last Modified time: 2025-05-30 15:51:14
6
6
  */
7
7
  import { useRef, useEffect } from 'react';
8
- const useUpdateEffect = (cb, deps) => {
8
+ const useUpdateEff = (cb, deps) => {
9
9
  const ref = useRef(false);
10
10
  useEffect(() => {
11
11
  if (ref.current) {
@@ -14,4 +14,4 @@ const useUpdateEffect = (cb, deps) => {
14
14
  ref.current = true;
15
15
  }, deps);
16
16
  };
17
- export default useUpdateEffect;
17
+ export default useUpdateEff;
package/es/useValue.js CHANGED
@@ -5,25 +5,22 @@
5
5
  * @Last Modified by: jade
6
6
  * @Last Modified Time: 2023-04-05 14:39:52
7
7
  */
8
- import { useState, useEffect } from 'react';
9
- import useRtCb from './useRtCb';
8
+ import { useState } from 'react';
9
+ import useUpdateEff from './useUpdateEff';
10
10
  const defEqual = (a, b) => a === b;
11
11
  const useValue = (value, onChange, opts) => {
12
12
  const { isEqual = defEqual } = opts || {};
13
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
- }
14
+ useUpdateEff(() => {
15
+ if (!isEqual(value, val)) {
16
+ onChange === null || onChange === void 0 ? void 0 : onChange(val);
25
17
  }
26
- }, [value, oldValue, val]);
18
+ }, [val]);
19
+ useUpdateEff(() => {
20
+ if (!isEqual(value, val)) {
21
+ setVal(value);
22
+ }
23
+ }, [value]);
27
24
  return [val, setVal];
28
25
  };
29
26
  export default useValue;
package/lib/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useResizeObserver = exports.useInterval = exports.useTimeout = exports.useAsync = exports.useThrottle = exports.useDebounce = exports.useIgnoreAbortErrCb = exports.useUnmount = exports.useMount = exports.useCreate = exports.useIsUnmount = exports.useIsMounted = exports.useUpdateEffect = exports.useRtCb = exports.useRtRef = exports.useOption = exports.useValue = exports.useBoolState = void 0;
6
+ exports.useResizeObserverHandler = exports.useResizeObserver = exports.useIntervalHandler = exports.useInterval = exports.useTimeoutHandler = exports.useTimeout = exports.useAsync = exports.useSafeRunner = exports.useThrottle = exports.useDebounce = exports.useIgnoreAbortErrCb = exports.useUnmount = exports.useMount = exports.useCreate = exports.useIsUnmount = exports.useIsMounted = exports.useUpdateEff = exports.useRtCb = exports.useRtRef = exports.useOption = exports.useValue = exports.useBoolState = void 0;
7
7
  // 特殊state
8
8
  var useBoolState_1 = require("./useBoolState");
9
9
  Object.defineProperty(exports, "useBoolState", { enumerable: true, get: function () { return __importDefault(useBoolState_1).default; } });
@@ -18,12 +18,12 @@ var useRtCb_1 = require("./useRtCb");
18
18
  Object.defineProperty(exports, "useRtCb", { enumerable: true, get: function () { return __importDefault(useRtCb_1).default; } });
19
19
  // 特殊 Effect
20
20
  var useUpdateEff_1 = require("./useUpdateEff");
21
- Object.defineProperty(exports, "useUpdateEffect", { enumerable: true, get: function () { return __importDefault(useUpdateEff_1).default; } });
21
+ Object.defineProperty(exports, "useUpdateEff", { enumerable: true, get: function () { return __importDefault(useUpdateEff_1).default; } });
22
22
  // 模拟生命周期
23
23
  var useIsMounted_1 = require("./useIsMounted");
24
24
  Object.defineProperty(exports, "useIsMounted", { enumerable: true, get: function () { return __importDefault(useIsMounted_1).default; } });
25
- var useIsUnmounted_1 = require("./useIsUnmounted");
26
- Object.defineProperty(exports, "useIsUnmount", { enumerable: true, get: function () { return __importDefault(useIsUnmounted_1).default; } });
25
+ var useIsUnmount_1 = require("./useIsUnmount");
26
+ Object.defineProperty(exports, "useIsUnmount", { enumerable: true, get: function () { return __importDefault(useIsUnmount_1).default; } });
27
27
  var useCreate_1 = require("./useCreate");
28
28
  Object.defineProperty(exports, "useCreate", { enumerable: true, get: function () { return __importDefault(useCreate_1).default; } });
29
29
  var useMount_1 = require("./useMount");
@@ -39,12 +39,17 @@ Object.defineProperty(exports, "useDebounce", { enumerable: true, get: function
39
39
  var useThrottle_1 = require("./useThrottle");
40
40
  Object.defineProperty(exports, "useThrottle", { enumerable: true, get: function () { return __importDefault(useThrottle_1).default; } });
41
41
  // 使用异步
42
+ var useSafeRunner_1 = require("./useSafeRunner");
43
+ Object.defineProperty(exports, "useSafeRunner", { enumerable: true, get: function () { return __importDefault(useSafeRunner_1).default; } });
42
44
  var useAsync_1 = require("./useAsync");
43
45
  Object.defineProperty(exports, "useAsync", { enumerable: true, get: function () { return __importDefault(useAsync_1).default; } });
44
46
  // 浏览器api
45
47
  var useTimeout_1 = require("./useTimeout");
46
48
  Object.defineProperty(exports, "useTimeout", { enumerable: true, get: function () { return __importDefault(useTimeout_1).default; } });
49
+ Object.defineProperty(exports, "useTimeoutHandler", { enumerable: true, get: function () { return useTimeout_1.useTimeoutHandler; } });
47
50
  var useInterval_1 = require("./useInterval");
48
51
  Object.defineProperty(exports, "useInterval", { enumerable: true, get: function () { return __importDefault(useInterval_1).default; } });
52
+ Object.defineProperty(exports, "useIntervalHandler", { enumerable: true, get: function () { return useInterval_1.useIntervalHandler; } });
49
53
  var useResizeObserver_1 = require("./useResizeObserver");
50
54
  Object.defineProperty(exports, "useResizeObserver", { enumerable: true, get: function () { return __importDefault(useResizeObserver_1).default; } });
55
+ Object.defineProperty(exports, "useResizeObserverHandler", { enumerable: true, get: function () { return useResizeObserver_1.useResizeObserverHandler; } });
package/lib/useAsync.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2025-03-18 23:44:38
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-19 22:53:22
6
+ * @Last Modified time: 2025-05-29 17:58:54
7
7
  */
8
8
  var __assign = (this && this.__assign) || function () {
9
9
  __assign = Object.assign || function(t) {
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
23
23
  var react_1 = require("react");
24
24
  var useRtCb_1 = __importDefault(require("./useRtCb"));
25
25
  var useCreate_1 = __importDefault(require("./useCreate"));
26
- var useIsUnmounted_1 = __importDefault(require("./useIsUnmounted"));
26
+ var useIsUnmount_1 = __importDefault(require("./useIsUnmount"));
27
27
  var useUnmount_1 = __importDefault(require("./useUnmount"));
28
28
  var defOpt = {
29
29
  immediate: false,
@@ -36,7 +36,7 @@ var useAsync = function (asyncFn, opt) {
36
36
  var _c = (0, react_1.useState)(false), loading = _c[0], setLoading = _c[1];
37
37
  var _d = (0, react_1.useState)(), error = _d[0], setError = _d[1];
38
38
  var _e = (0, react_1.useState)(), controller = _e[0], setController = _e[1];
39
- var isUnmounted = (0, useIsUnmounted_1.default)();
39
+ var isUnmounted = (0, useIsUnmount_1.default)();
40
40
  (0, react_1.useEffect)(function () {
41
41
  if (!controller || !opt.onAbort) {
42
42
  return;
@@ -85,6 +85,6 @@ var useAsync = function (asyncFn, opt) {
85
85
  controller.abort();
86
86
  }
87
87
  });
88
- return [data, { run: run, refresh: refresh, loading: loading, error: error, param: param }];
88
+ return [data, { run: run, refresh: refresh, loading: loading, error: error, param: param, controller: controller }];
89
89
  };
90
90
  exports.default = useAsync;
@@ -3,7 +3,7 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2025-03-16 11:16:34
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-16 11:21:54
6
+ * @Last Modified time: 2025-05-29 18:08:43
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  var react_1 = require("react");
@@ -3,7 +3,7 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2025-03-19 22:55:14
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-19 22:55:14
6
+ * @Last Modified time: 2025-05-29 18:56:32
7
7
  */
8
8
  var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -22,6 +22,6 @@ var useDebounce = function (cb, wait, opts) {
22
22
  }
23
23
  rtCb.apply(void 0, arg);
24
24
  }, wait, opts);
25
- }, []);
25
+ }, [wait, opts]);
26
26
  };
27
27
  exports.default = useDebounce;
@@ -3,11 +3,25 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2023-12-14 16:51:29
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-19 23:11:26
6
+ * @Last Modified time: 2025-05-30 18:24:00
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
+ };
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
8
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.useInterval = exports.useIntervalHandler = void 0;
9
22
  var react_1 = require("react");
10
- var useInterval = function () {
23
+ var useRtCb_1 = __importDefault(require("./useRtCb"));
24
+ var useIntervalHandler = function () {
11
25
  var timerRef = (0, react_1.useRef)();
12
26
  var clearTimer = (0, react_1.useCallback)(function () {
13
27
  if (timerRef.current) {
@@ -22,7 +36,6 @@ var useInterval = function () {
22
36
  }
23
37
  clearTimer();
24
38
  timerRef.current = window.setInterval(function () {
25
- timerRef.current = undefined;
26
39
  callback.apply(void 0, arg);
27
40
  }, timeout);
28
41
  }, []);
@@ -32,4 +45,19 @@ var useInterval = function () {
32
45
  clearTimer,
33
46
  ];
34
47
  };
35
- exports.default = useInterval;
48
+ exports.useIntervalHandler = useIntervalHandler;
49
+ var useInterval = function (callback, timeout) {
50
+ var arg = [];
51
+ for (var _i = 2; _i < arguments.length; _i++) {
52
+ arg[_i - 2] = arguments[_i];
53
+ }
54
+ var _a = (0, exports.useIntervalHandler)(), bindTimer = _a[0], clearTimer = _a[1];
55
+ var cb = (0, useRtCb_1.default)(callback);
56
+ (0, react_1.useEffect)(function () {
57
+ bindTimer.apply(void 0, __spreadArray([cb, timeout], arg, false));
58
+ return clearTimer;
59
+ }, __spreadArray([cb, timeout], arg, true));
60
+ return clearTimer;
61
+ };
62
+ exports.useInterval = useInterval;
63
+ exports.default = exports.useInterval;
@@ -3,17 +3,18 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2025-03-16 21:33:24
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-16 21:35:46
6
+ * @Last Modified time: 2025-05-29 20:15:50
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  var react_1 = require("react");
10
- var useIsUnmounted = function () {
11
- var ref = (0, react_1.useRef)(false);
10
+ var useIsUnmount = function () {
11
+ var ref = (0, react_1.useRef)(true);
12
12
  (0, react_1.useEffect)(function () {
13
+ ref.current = false;
13
14
  return function () {
14
15
  ref.current = true;
15
16
  };
16
17
  }, []);
17
18
  return (0, react_1.useCallback)(function () { return ref.current; }, []);
18
19
  };
19
- exports.default = useIsUnmounted;
20
+ exports.default = useIsUnmount;
@@ -3,9 +3,10 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2023-11-24 10:52:51
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-19 23:17:45
6
+ * @Last Modified time: 2025-05-30 14:35:56
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.useResizeObserver = exports.useResizeObserverHandler = void 0;
9
10
  var react_1 = require("react");
10
11
  var resizeObserver = null;
11
12
  var observeCatch = null;
@@ -26,6 +27,9 @@ var observe = function (target, cb) {
26
27
  if (!resizeObserver) {
27
28
  init();
28
29
  }
30
+ if (!target) {
31
+ return;
32
+ }
29
33
  observeCatch === null || observeCatch === void 0 ? void 0 : observeCatch.set(target, cb);
30
34
  resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(target);
31
35
  };
@@ -33,21 +37,30 @@ var unobserve = function (target) {
33
37
  if (!resizeObserver) {
34
38
  init();
35
39
  }
40
+ if (!target) {
41
+ return;
42
+ }
36
43
  resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.unobserve(target);
37
44
  observeCatch === null || observeCatch === void 0 ? void 0 : observeCatch.delete(target);
38
45
  };
39
- function useResizeObserver(dom, cb) {
40
- var selfObserve = (0, react_1.useCallback)(function () {
41
- observe(dom, cb);
42
- }, [dom, cb]);
46
+ var useResizeObserverHandler = function () {
47
+ return [observe, unobserve];
48
+ };
49
+ exports.useResizeObserverHandler = useResizeObserverHandler;
50
+ var useResizeObserver = function (domRef, cb) {
43
51
  var selfUnobserve = (0, react_1.useCallback)(function () {
44
- unobserve(dom);
45
- }, [dom]);
52
+ if (domRef.current) {
53
+ unobserve(domRef.current);
54
+ }
55
+ }, [domRef.current]);
46
56
  (0, react_1.useEffect)(function () {
57
+ if (!domRef.current)
58
+ return;
59
+ var dom = domRef.current;
47
60
  observe(dom, cb);
48
61
  return function () { return unobserve(dom); };
49
- }, [dom, cb]);
50
- return [selfObserve, selfUnobserve];
51
- }
52
- exports.default = useResizeObserver;
53
- ;
62
+ }, [domRef.current, cb]);
63
+ return selfUnobserve;
64
+ };
65
+ exports.useResizeObserver = useResizeObserver;
66
+ exports.default = exports.useResizeObserver;
package/lib/useRtRef.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2025-03-16 22:19:57
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-17 00:10:45
6
+ * @Last Modified time: 2025-05-30 15:05:26
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  var react_1 = require("react");
@@ -10,9 +10,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  var react_1 = require("react");
13
- var useIsUnmounted_1 = __importDefault(require("./useIsUnmounted"));
13
+ var useIsUnmount_1 = __importDefault(require("./useIsUnmount"));
14
14
  var useSafeRunner = function () {
15
- var isUnmount = (0, useIsUnmounted_1.default)();
15
+ var isUnmount = (0, useIsUnmount_1.default)();
16
16
  return (0, react_1.useCallback)(function (cb, unmountCb) {
17
17
  if (isUnmount()) {
18
18
  unmountCb === null || unmountCb === void 0 ? void 0 : unmountCb();
@@ -3,7 +3,7 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2025-03-19 22:55:28
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-19 22:55:48
6
+ * @Last Modified time: 2025-05-30 15:31:34
7
7
  */
8
8
  var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -22,6 +22,6 @@ var useThrottle = function (cb, wait, opts) {
22
22
  }
23
23
  rtCb.apply(void 0, arg);
24
24
  }, wait, opts);
25
- }, []);
25
+ }, [wait, opts]);
26
26
  };
27
27
  exports.default = useThrottle;
package/lib/useTimeout.js CHANGED
@@ -3,11 +3,25 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2025-03-19 23:10:13
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-19 23:10:13
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
+ };
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
8
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.useTimeout = exports.useTimeoutHandler = void 0;
9
22
  var react_1 = require("react");
10
- var useTimeout = function () {
23
+ var useRtCb_1 = __importDefault(require("./useRtCb"));
24
+ var useTimeoutHandler = function () {
11
25
  var timerRef = (0, react_1.useRef)();
12
26
  var clearTimer = (0, react_1.useCallback)(function () {
13
27
  if (timerRef.current) {
@@ -32,4 +46,19 @@ var useTimeout = function () {
32
46
  clearTimer,
33
47
  ];
34
48
  };
35
- exports.default = useTimeout;
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];
56
+ var cb = (0, useRtCb_1.default)(callback);
57
+ (0, react_1.useEffect)(function () {
58
+ bindTimer.apply(void 0, __spreadArray([cb, timeout], arg, false));
59
+ return clearTimer;
60
+ }, __spreadArray([cb, timeout], arg, true));
61
+ return clearTimer;
62
+ };
63
+ exports.useTimeout = useTimeout;
64
+ exports.default = exports.useTimeout;
@@ -3,11 +3,11 @@
3
3
  * @Author: apathyjade
4
4
  * @Date: 2025-03-16 11:35:13
5
5
  * @Last Modified by: apathyjade
6
- * @Last Modified time: 2025-03-16 11:35:13
6
+ * @Last Modified time: 2025-05-30 15:51:14
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  var react_1 = require("react");
10
- var useUpdateEffect = function (cb, deps) {
10
+ var useUpdateEff = function (cb, deps) {
11
11
  var ref = (0, react_1.useRef)(false);
12
12
  (0, react_1.useEffect)(function () {
13
13
  if (ref.current) {
@@ -16,4 +16,4 @@ var useUpdateEffect = function (cb, deps) {
16
16
  ref.current = true;
17
17
  }, deps);
18
18
  };
19
- exports.default = useUpdateEffect;
19
+ exports.default = useUpdateEff;
package/lib/useValue.js CHANGED
@@ -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
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
30
  };
34
31
  exports.default = useValue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jelper/hooks",
3
- "version": "1.0.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,7 +20,7 @@
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
26
  "@types/lodash-es": "~4.17.8",
package/types/index.d.ts CHANGED
@@ -3,16 +3,17 @@ export { default as useValue } from './useValue';
3
3
  export { default as useOption } from './useOption';
4
4
  export { default as useRtRef } from './useRtRef';
5
5
  export { default as useRtCb } from './useRtCb';
6
- export { default as useUpdateEffect } from './useUpdateEff';
6
+ export { default as useUpdateEff } from './useUpdateEff';
7
7
  export { default as useIsMounted } from './useIsMounted';
8
- export { default as useIsUnmount } from './useIsUnmounted';
8
+ export { default as useIsUnmount } from './useIsUnmount';
9
9
  export { default as useCreate } from './useCreate';
10
10
  export { default as useMount } from './useMount';
11
11
  export { default as useUnmount } from './useUnmount';
12
12
  export { default as useIgnoreAbortErrCb } from './useIgnoreAbortErrCb';
13
13
  export { default as useDebounce } from './useDebounce';
14
14
  export { default as useThrottle } from './useThrottle';
15
+ export { default as useSafeRunner } from './useSafeRunner';
15
16
  export { default as useAsync } from './useAsync';
16
- export { default as useTimeout } from './useTimeout';
17
- export { default as useInterval } from './useInterval';
18
- 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';
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-18 23:44:38
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 22:53:22
5
+ * @Last Modified time: 2025-05-29 17:58:54
6
6
  */
7
7
  type Parameter<T extends (p: any) => any> = Parameters<T>[0];
8
8
  interface Opt<T extends (p: any) => any, R> {
@@ -22,6 +22,7 @@ declare const useAsync: <T extends (p: any, opt?: {
22
22
  loading: boolean;
23
23
  error?: Error;
24
24
  param: Partial<Parameter<T>>;
25
+ controller: AbortController | undefined;
25
26
  }
26
27
  ];
27
28
  export default useAsync;
@@ -2,7 +2,10 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-16 11:16:34
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-16 11:21:54
5
+ * @Last Modified time: 2025-05-29 18:08:43
6
6
  */
7
- declare const useBoolState: (value: boolean) => (boolean | ((switchValue?: React.SetStateAction<boolean>) => void))[];
7
+ declare const useBoolState: (value: boolean) => [
8
+ boolean,
9
+ (val?: boolean) => void
10
+ ];
8
11
  export default useBoolState;
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-19 22:55:14
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 22:55:14
5
+ * @Last Modified time: 2025-05-29 18:56:32
6
6
  */
7
7
  import { DebounceSettings, DebouncedFunc } from 'lodash-es';
8
8
  declare const useDebounce: <T extends (...args: any) => any>(cb: T, wait?: number, opts?: DebounceSettings) => DebouncedFunc<T>;
@@ -1,5 +1,6 @@
1
- declare const useInterval: () => [
1
+ export declare const useIntervalHandler: () => [
2
2
  (callback: Function, timeout?: number, ...arg: any[]) => void,
3
3
  () => void
4
4
  ];
5
+ export declare const useInterval: (callback: Function, timeout?: number, ...arg: any[]) => (() => void);
5
6
  export default useInterval;
@@ -0,0 +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
+ */
7
+ declare const useIsUnmount: () => (() => boolean);
8
+ export default useIsUnmount;
@@ -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;
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-16 22:19:57
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-17 00:10:45
5
+ * @Last Modified time: 2025-05-30 15:05:26
6
6
  */
7
7
  /// <reference types="react" />
8
8
  declare const useRtRef: <T>(val: T) => import("react").MutableRefObject<T>;
@@ -2,8 +2,8 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-19 22:55:28
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 22:55:48
5
+ * @Last Modified time: 2025-05-30 15:31:34
6
6
  */
7
- import { ThrottleSettings } from 'lodash-es';
8
- 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>;
9
9
  export default useThrottle;
@@ -2,10 +2,11 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-19 23:10:13
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-19 23:10:13
5
+ * @Last Modified time: 2025-05-30 18:24:42
6
6
  */
7
- declare const useTimeout: () => [
7
+ export declare const useTimeoutHandler: () => [
8
8
  (callback: Function, timeout?: number, ...arg: any[]) => void,
9
9
  () => void
10
10
  ];
11
+ export declare const useTimeout: (callback: Function, timeout?: number, ...arg: any[]) => () => void;
11
12
  export default useTimeout;
@@ -2,7 +2,7 @@
2
2
  * @Author: apathyjade
3
3
  * @Date: 2025-03-16 11:35:13
4
4
  * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-16 11:35:13
5
+ * @Last Modified time: 2025-05-30 15:51:14
6
6
  */
7
- declare const useUpdateEffect: (cb: React.EffectCallback, deps?: React.DependencyList) => void;
8
- export default useUpdateEffect;
7
+ declare const useUpdateEff: (cb: React.EffectCallback, deps?: React.DependencyList) => void;
8
+ export default useUpdateEff;
@@ -1,8 +0,0 @@
1
- /**
2
- * @Author: apathyjade
3
- * @Date: 2025-03-16 21:33:24
4
- * @Last Modified by: apathyjade
5
- * @Last Modified time: 2025-03-16 21:35:46
6
- */
7
- declare const useIsUnmounted: () => (() => boolean);
8
- export default useIsUnmounted;