@jelper/hooks 0.3.0 → 1.0.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 +12 -14
- package/es/useAsync.js +54 -14
- package/es/useBoolState.js +13 -5
- package/es/useCreate.js +6 -0
- package/es/useDebounce.js +6 -0
- package/es/useIgnoreAbortErrCb.js +16 -0
- package/es/useInterval.js +15 -11
- package/es/useIsMounted.js +18 -0
- package/es/useIsUnmounted.js +17 -0
- package/es/useMount.js +7 -6
- package/es/useOption.js +19 -0
- package/es/useResizeObserver.js +5 -5
- package/es/useRtCb.js +10 -5
- package/es/useRtRef.js +11 -5
- package/es/useSafeRunner.js +20 -0
- package/es/useThrottle.js +6 -7
- package/es/useTimeout.js +18 -23
- package/es/useUnmount.js +9 -3
- package/es/useUpdateEff.js +17 -0
- package/es/{useRtState.js → useValue.js} +3 -2
- package/lib/index.js +21 -25
- package/lib/useAsync.js +56 -16
- package/lib/useBoolState.js +12 -7
- package/lib/useCreate.js +6 -0
- package/lib/useDebounce.js +6 -0
- package/lib/useIgnoreAbortErrCb.js +19 -0
- package/lib/useInterval.js +19 -14
- package/lib/useIsMounted.js +20 -0
- package/lib/useIsUnmounted.js +19 -0
- package/lib/useMount.js +7 -9
- package/lib/useOption.js +33 -0
- package/lib/useResizeObserver.js +4 -7
- package/lib/useRtCb.js +12 -15
- package/lib/useRtRef.js +9 -4
- package/lib/useSafeRunner.js +25 -0
- package/lib/useThrottle.js +6 -7
- package/lib/useTimeout.js +22 -26
- package/lib/useUnmount.js +11 -2
- package/lib/useUpdateEff.js +19 -0
- package/lib/{useRtState.js → useValue.js} +3 -3
- package/package.json +10 -4
- package/types/index.d.ts +8 -10
- package/types/useAsync.d.ts +22 -8
- package/types/useBoolState.d.ts +7 -1
- package/types/useCreate.d.ts +7 -1
- package/types/useDebounce.d.ts +6 -0
- package/types/useIgnoreAbortErrCb.d.ts +12 -0
- package/types/useInterval.d.ts +4 -1
- package/types/useIsMounted.d.ts +8 -0
- package/types/useIsUnmounted.d.ts +8 -0
- package/types/useMount.d.ts +7 -1
- package/types/useOption.d.ts +15 -0
- package/types/useRtCb.d.ts +8 -1
- package/types/useRtRef.d.ts +8 -1
- package/types/useSafeRunner.d.ts +8 -0
- package/types/useThrottle.d.ts +5 -6
- package/types/useTimeout.d.ts +8 -5
- package/types/useUnmount.d.ts +7 -1
- package/types/useUpdateEff.d.ts +8 -0
- package/types/useValue.d.ts +8 -0
- package/es/useIsUnmount.js +0 -11
- package/es/useListener.js +0 -17
- package/es/useParamsState.js +0 -9
- package/es/useRtEffect.js +0 -7
- package/es/useSafeCb.js +0 -11
- package/es/useSafeState.js +0 -8
- package/es/useUpdateEffect.js +0 -12
- package/lib/useIsUnmount.js +0 -13
- package/lib/useListener.js +0 -22
- package/lib/useParamsState.js +0 -26
- package/lib/useRtEffect.js +0 -12
- package/lib/useSafeCb.js +0 -20
- package/lib/useSafeState.js +0 -13
- package/lib/useUpdateEffect.js +0 -15
- package/types/useIsUnmount.d.ts +0 -2
- package/types/useListener.d.ts +0 -2
- package/types/useParamsState.d.ts +0 -6
- package/types/useRtEffect.d.ts +0 -2
- package/types/useRtState.d.ts +0 -6
- package/types/useSafeCb.d.ts +0 -2
- package/types/useSafeState.d.ts +0 -5
- package/types/useUpdateEffect.d.ts +0 -1
package/es/index.js
CHANGED
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
//
|
|
2
|
-
export { default as
|
|
3
|
-
export { default as
|
|
1
|
+
// 特殊state
|
|
2
|
+
export { default as useBoolState } from './useBoolState';
|
|
3
|
+
export { default as useValue } from './useValue';
|
|
4
|
+
export { default as useOption } from './useOption';
|
|
4
5
|
// 传入参数实时更新,保证内部最新数据
|
|
5
6
|
export { default as useRtRef } from './useRtRef';
|
|
6
|
-
export { default as useRtState } from './useRtState';
|
|
7
7
|
export { default as useRtCb } from './useRtCb';
|
|
8
|
-
export { default as useRtEffect } from './useRtEffect'; // 保证卸载回调能拿到最新数据
|
|
9
|
-
// 特殊state
|
|
10
|
-
export { default as useBoolState } from './useBoolState';
|
|
11
|
-
export { default as useParamsState } from './useParamsState';
|
|
12
8
|
// 特殊 Effect
|
|
13
|
-
export { default as useUpdateEffect } from './
|
|
14
|
-
//
|
|
15
|
-
export { default as
|
|
9
|
+
export { default as useUpdateEffect } from './useUpdateEff';
|
|
10
|
+
// 模拟生命周期
|
|
11
|
+
export { default as useIsMounted } from './useIsMounted';
|
|
12
|
+
export { default as useIsUnmount } from './useIsUnmounted';
|
|
16
13
|
export { default as useCreate } from './useCreate';
|
|
17
14
|
export { default as useMount } from './useMount';
|
|
18
15
|
export { default as useUnmount } from './useUnmount';
|
|
19
|
-
//
|
|
20
|
-
export { default as
|
|
16
|
+
// callback
|
|
17
|
+
export { default as useIgnoreAbortErrCb } from './useIgnoreAbortErrCb';
|
|
18
|
+
// 防抖节流
|
|
21
19
|
export { default as useDebounce } from './useDebounce';
|
|
20
|
+
export { default as useThrottle } from './useThrottle';
|
|
22
21
|
// 使用异步
|
|
23
22
|
export { default as useAsync } from './useAsync';
|
|
24
23
|
// 浏览器api
|
|
25
24
|
export { default as useTimeout } from './useTimeout';
|
|
26
25
|
export { default as useInterval } from './useInterval';
|
|
27
|
-
export { default as useListener } from './useListener';
|
|
28
26
|
export { default as useResizeObserver } from './useResizeObserver';
|
package/es/useAsync.js
CHANGED
|
@@ -1,33 +1,73 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @Author: apathyjade
|
|
3
|
+
* @Date: 2025-03-18 23:44:38
|
|
4
|
+
* @Last Modified by: apathyjade
|
|
5
|
+
* @Last Modified time: 2025-03-19 22:53:22
|
|
6
|
+
*/
|
|
7
|
+
import { useEffect, useState } from 'react';
|
|
2
8
|
import useRtCb from './useRtCb';
|
|
3
9
|
import useCreate from './useCreate';
|
|
4
|
-
|
|
10
|
+
import useIsUnmounted from './useIsUnmounted';
|
|
11
|
+
import useUnmount from './useUnmount';
|
|
12
|
+
const defOpt = {
|
|
5
13
|
immediate: false,
|
|
6
14
|
catchParam: false,
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const [
|
|
10
|
-
const [
|
|
11
|
-
const [
|
|
15
|
+
};
|
|
16
|
+
const useAsync = (asyncFn, opt = defOpt) => {
|
|
17
|
+
const [data, setData] = useState();
|
|
18
|
+
const [param, setParam] = useState(opt.defParam || {});
|
|
19
|
+
const [loading, setLoading] = useState(false);
|
|
20
|
+
const [error, setError] = useState();
|
|
21
|
+
const [controller, setController] = useState();
|
|
22
|
+
const isUnmounted = useIsUnmounted();
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (!controller || !opt.onAbort) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const onAbort = opt.onAbort;
|
|
28
|
+
controller.signal.addEventListener('abort', onAbort);
|
|
29
|
+
return () => {
|
|
30
|
+
controller.signal.removeEventListener('abort', onAbort);
|
|
31
|
+
};
|
|
32
|
+
}, [controller]);
|
|
12
33
|
const run = useRtCb((runParam) => {
|
|
13
34
|
const currParam = opt.catchParam ? Object.assign(Object.assign({}, param), (runParam || {})) : runParam;
|
|
14
35
|
setLoading(true);
|
|
15
|
-
setError(
|
|
16
|
-
|
|
17
|
-
.
|
|
36
|
+
setError(undefined);
|
|
37
|
+
if (controller) {
|
|
38
|
+
controller.abort();
|
|
39
|
+
}
|
|
40
|
+
const abortController = new AbortController();
|
|
41
|
+
setController(abortController);
|
|
42
|
+
return asyncFn(currParam, { signal: abortController.signal })
|
|
18
43
|
.then((resData) => {
|
|
19
|
-
|
|
44
|
+
if (isUnmounted() || abortController.signal.aborted)
|
|
45
|
+
return;
|
|
46
|
+
setData(opt.format ? opt.format(resData) : resData);
|
|
20
47
|
setParam(currParam);
|
|
21
|
-
}, setError)
|
|
22
|
-
.finally(() => {
|
|
23
48
|
setLoading(false);
|
|
49
|
+
}, (err) => {
|
|
50
|
+
if (isUnmounted() || abortController.signal.aborted)
|
|
51
|
+
return Promise.reject(err);
|
|
52
|
+
setError(err);
|
|
53
|
+
setLoading(false);
|
|
54
|
+
}).finally(() => {
|
|
55
|
+
if (isUnmounted())
|
|
56
|
+
return;
|
|
57
|
+
setController(undefined);
|
|
24
58
|
});
|
|
25
59
|
});
|
|
60
|
+
const refresh = useRtCb(() => run(param));
|
|
26
61
|
useCreate(() => {
|
|
27
62
|
if (opt.immediate) {
|
|
28
63
|
run(param);
|
|
29
64
|
}
|
|
30
65
|
});
|
|
31
|
-
|
|
66
|
+
useUnmount(() => {
|
|
67
|
+
if (controller) {
|
|
68
|
+
controller.abort();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
return [data, { run, refresh, loading, error, param }];
|
|
32
72
|
};
|
|
33
73
|
export default useAsync;
|
package/es/useBoolState.js
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @Author: apathyjade
|
|
3
|
+
* @Date: 2025-03-16 11:16:34
|
|
4
|
+
* @Last Modified by: apathyjade
|
|
5
|
+
* @Last Modified time: 2025-03-16 11:21:54
|
|
6
|
+
*/
|
|
7
|
+
import { useState, useCallback } from 'react';
|
|
3
8
|
const useBoolState = (value) => {
|
|
4
|
-
const [val, setVal] =
|
|
9
|
+
const [val, setVal] = useState(value);
|
|
5
10
|
const switchFn = useCallback((switchValue) => {
|
|
6
|
-
if (
|
|
11
|
+
if (switchValue === undefined || switchValue === null) {
|
|
12
|
+
setVal((oldVal) => !oldVal);
|
|
13
|
+
}
|
|
14
|
+
else if (typeof switchValue === 'boolean' || typeof switchValue === 'function') {
|
|
7
15
|
setVal(switchValue);
|
|
8
16
|
}
|
|
9
17
|
else {
|
|
10
|
-
setVal(
|
|
18
|
+
setVal(!!switchValue);
|
|
11
19
|
}
|
|
12
20
|
}, []);
|
|
13
21
|
return [val, switchFn];
|
package/es/useCreate.js
CHANGED
package/es/useDebounce.js
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
import { useCallback } from "react";
|
|
8
|
+
const useIgnoreAbortErrCb = (cb, deps = [], opts) => {
|
|
9
|
+
return useCallback((err) => {
|
|
10
|
+
var _a;
|
|
11
|
+
if (err.name === 'AbortError')
|
|
12
|
+
return (_a = opts === null || opts === void 0 ? void 0 : opts.onAbort) === null || _a === void 0 ? void 0 : _a.call(opts, err);
|
|
13
|
+
return cb(err);
|
|
14
|
+
}, deps);
|
|
15
|
+
};
|
|
16
|
+
export default useIgnoreAbortErrCb;
|
package/es/useInterval.js
CHANGED
|
@@ -2,24 +2,28 @@
|
|
|
2
2
|
* @Author: apathyjade
|
|
3
3
|
* @Date: 2023-12-14 16:51:29
|
|
4
4
|
* @Last Modified by: apathyjade
|
|
5
|
-
* @Last Modified time:
|
|
5
|
+
* @Last Modified time: 2025-03-19 23:11:26
|
|
6
6
|
*/
|
|
7
7
|
import { useCallback, useEffect, useRef } from 'react';
|
|
8
|
-
|
|
9
|
-
const useInterval = (callback, delay) => {
|
|
8
|
+
const useInterval = () => {
|
|
10
9
|
const timerRef = useRef();
|
|
11
10
|
const clearTimer = useCallback(() => {
|
|
12
11
|
if (timerRef.current) {
|
|
13
12
|
window.clearInterval(timerRef.current);
|
|
13
|
+
timerRef.current = undefined;
|
|
14
14
|
}
|
|
15
15
|
}, []);
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
timerRef.current = window.setInterval(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
}, [
|
|
23
|
-
|
|
16
|
+
const bindTimer = useCallback((callback, timeout, ...arg) => {
|
|
17
|
+
clearTimer();
|
|
18
|
+
timerRef.current = window.setInterval(() => {
|
|
19
|
+
timerRef.current = undefined;
|
|
20
|
+
callback(...arg);
|
|
21
|
+
}, timeout);
|
|
22
|
+
}, []);
|
|
23
|
+
useEffect(() => clearTimer);
|
|
24
|
+
return [
|
|
25
|
+
bindTimer,
|
|
26
|
+
clearTimer,
|
|
27
|
+
];
|
|
24
28
|
};
|
|
25
29
|
export default useInterval;
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
8
|
+
const useIsMounted = () => {
|
|
9
|
+
const ref = useRef(false);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
ref.current = true;
|
|
12
|
+
return () => {
|
|
13
|
+
ref.current = false;
|
|
14
|
+
};
|
|
15
|
+
}, []);
|
|
16
|
+
return useCallback(() => ref.current, []);
|
|
17
|
+
};
|
|
18
|
+
export default useIsMounted;
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
8
|
+
const useIsUnmounted = () => {
|
|
9
|
+
const ref = useRef(false);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
return () => {
|
|
12
|
+
ref.current = true;
|
|
13
|
+
};
|
|
14
|
+
}, []);
|
|
15
|
+
return useCallback(() => ref.current, []);
|
|
16
|
+
};
|
|
17
|
+
export default useIsUnmounted;
|
package/es/useMount.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
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
|
+
*/
|
|
1
7
|
import { useEffect } from 'react';
|
|
2
|
-
import useRtRef from './useRtRef';
|
|
3
8
|
const useMount = (cb) => {
|
|
4
|
-
|
|
5
|
-
useEffect(() => {
|
|
6
|
-
var _a;
|
|
7
|
-
(_a = ref.current) === null || _a === void 0 ? void 0 : _a.call(ref);
|
|
8
|
-
});
|
|
9
|
+
useEffect(cb, []);
|
|
9
10
|
};
|
|
10
11
|
export default useMount;
|
package/es/useOption.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
import { useCallback, useState } from 'react';
|
|
8
|
+
const useOption = (defOpt = {}) => {
|
|
9
|
+
const [initOpt] = useState(defOpt);
|
|
10
|
+
const [option, setOption] = useState(initOpt);
|
|
11
|
+
const reset = useCallback(() => {
|
|
12
|
+
setOption(initOpt);
|
|
13
|
+
}, [initOpt]);
|
|
14
|
+
const update = useCallback((newOpts) => {
|
|
15
|
+
setOption((oldOpts) => (Object.assign(Object.assign({}, (oldOpts || {})), (typeof newOpts === 'function' ? newOpts(oldOpts) : newOpts || {}))));
|
|
16
|
+
}, []);
|
|
17
|
+
return [option, { setOption, reset, update }];
|
|
18
|
+
};
|
|
19
|
+
export default useOption;
|
package/es/useResizeObserver.js
CHANGED
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
* @Author: apathyjade
|
|
3
3
|
* @Date: 2023-11-24 10:52:51
|
|
4
4
|
* @Last Modified by: apathyjade
|
|
5
|
-
* @Last Modified time:
|
|
5
|
+
* @Last Modified time: 2025-03-19 23:17:45
|
|
6
6
|
*/
|
|
7
|
-
import { useEffect } from 'react';
|
|
8
|
-
import useSafeCb from './useSafeCb';
|
|
7
|
+
import { useCallback, useEffect } from 'react';
|
|
9
8
|
let resizeObserver = null;
|
|
10
9
|
let observeCatch = null;
|
|
11
10
|
function init() {
|
|
@@ -20,6 +19,7 @@ function init() {
|
|
|
20
19
|
});
|
|
21
20
|
});
|
|
22
21
|
}
|
|
22
|
+
;
|
|
23
23
|
const observe = (target, cb) => {
|
|
24
24
|
if (!resizeObserver) {
|
|
25
25
|
init();
|
|
@@ -35,10 +35,10 @@ const unobserve = (target) => {
|
|
|
35
35
|
observeCatch === null || observeCatch === void 0 ? void 0 : observeCatch.delete(target);
|
|
36
36
|
};
|
|
37
37
|
export default function useResizeObserver(dom, cb) {
|
|
38
|
-
const selfObserve =
|
|
38
|
+
const selfObserve = useCallback(() => {
|
|
39
39
|
observe(dom, cb);
|
|
40
40
|
}, [dom, cb]);
|
|
41
|
-
const selfUnobserve =
|
|
41
|
+
const selfUnobserve = useCallback(() => {
|
|
42
42
|
unobserve(dom);
|
|
43
43
|
}, [dom]);
|
|
44
44
|
useEffect(() => {
|
package/es/useRtCb.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
|
|
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 { useCallback } from 'react';
|
|
2
8
|
import useRtRef from './useRtRef';
|
|
3
|
-
const useRtCb = (cb, deps) => {
|
|
9
|
+
const useRtCb = (cb, deps = []) => {
|
|
4
10
|
const ref = useRtRef(cb);
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
return (_a = ref.current) === null || _a === void 0 ? void 0 : _a.call(ref, ...arg);
|
|
11
|
+
return useCallback((...args) => {
|
|
12
|
+
return ref.current(...args);
|
|
8
13
|
}, deps);
|
|
9
14
|
};
|
|
10
15
|
export default useRtCb;
|
package/es/useRtRef.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @Author: apathyjade
|
|
3
|
+
* @Date: 2025-03-16 22:19:57
|
|
4
|
+
* @Last Modified by: apathyjade
|
|
5
|
+
* @Last Modified time: 2025-03-17 00:10:45
|
|
6
|
+
*/
|
|
7
|
+
import { useRef } from 'react';
|
|
8
|
+
const useRtRef = (val) => {
|
|
9
|
+
const ref = useRef(val);
|
|
4
10
|
ref.current = val;
|
|
5
11
|
return ref;
|
|
6
|
-
}
|
|
7
|
-
;
|
|
12
|
+
};
|
|
13
|
+
export default useRtRef;
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
import { useCallback } from 'react';
|
|
8
|
+
import useIsUnmount from "./useIsUnmounted";
|
|
9
|
+
const useSafeRunner = () => {
|
|
10
|
+
const isUnmount = useIsUnmount();
|
|
11
|
+
return useCallback((cb, unmountCb) => {
|
|
12
|
+
if (isUnmount()) {
|
|
13
|
+
unmountCb === null || unmountCb === void 0 ? void 0 : unmountCb();
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
cb();
|
|
17
|
+
}
|
|
18
|
+
}, []);
|
|
19
|
+
};
|
|
20
|
+
export default useSafeRunner;
|
package/es/useThrottle.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @Author: apathyjade
|
|
3
|
+
* @Date: 2025-03-19 22:55:28
|
|
4
|
+
* @Last Modified by: apathyjade
|
|
5
|
+
* @Last Modified time: 2025-03-19 22:55:48
|
|
6
|
+
*/
|
|
1
7
|
import { throttle } from 'lodash-es';
|
|
2
8
|
import { useMemo } from 'react';
|
|
3
9
|
import useRtCb from './useRtCb';
|
|
4
|
-
/**
|
|
5
|
-
* 用于节流函数的钩子函数
|
|
6
|
-
* @param cb - 要节流的函数
|
|
7
|
-
* @param wait - 节流延迟时间,默认为0
|
|
8
|
-
* @param opts - 节流选项对象,默认为{}
|
|
9
|
-
* @returns 节流函数
|
|
10
|
-
*/
|
|
11
10
|
const useThrottle = (cb, wait, opts) => {
|
|
12
11
|
const rtCb = useRtCb(cb);
|
|
13
12
|
return useMemo(() => {
|
package/es/useTimeout.js
CHANGED
|
@@ -1,34 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
2
|
* @Author: apathyjade
|
|
3
|
-
* @Date:
|
|
3
|
+
* @Date: 2025-03-19 23:10:13
|
|
4
4
|
* @Last Modified by: apathyjade
|
|
5
|
-
* @Last Modified time:
|
|
5
|
+
* @Last Modified time: 2025-03-19 23:10:13
|
|
6
6
|
*/
|
|
7
7
|
import { useCallback, useEffect, useRef } from 'react';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* 使用定时器在指定延迟后执行回调函数
|
|
11
|
-
* @param callback - 回调函数
|
|
12
|
-
* @param delay - 延迟时间(毫秒)
|
|
13
|
-
* @returns clearTimer - 清除定时器的函数
|
|
14
|
-
*/
|
|
15
|
-
const useTimeout = (callback, delay) => {
|
|
8
|
+
const useTimeout = () => {
|
|
16
9
|
const timerRef = useRef();
|
|
17
|
-
/**
|
|
18
|
-
* 清除定时器
|
|
19
|
-
*/
|
|
20
10
|
const clearTimer = useCallback(() => {
|
|
21
11
|
if (timerRef.current) {
|
|
22
|
-
clearTimeout(timerRef.current);
|
|
12
|
+
window.clearTimeout(timerRef.current);
|
|
13
|
+
timerRef.current = undefined;
|
|
23
14
|
}
|
|
24
15
|
}, []);
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
timerRef.current = window.setTimeout(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
31
|
-
}, [
|
|
32
|
-
|
|
16
|
+
const bindTimer = useCallback((callback, timeout, ...arg) => {
|
|
17
|
+
clearTimer();
|
|
18
|
+
timerRef.current = window.setTimeout(() => {
|
|
19
|
+
timerRef.current = undefined;
|
|
20
|
+
callback(...arg);
|
|
21
|
+
}, timeout);
|
|
22
|
+
}, []);
|
|
23
|
+
useEffect(() => clearTimer);
|
|
24
|
+
return [
|
|
25
|
+
bindTimer,
|
|
26
|
+
clearTimer,
|
|
27
|
+
];
|
|
33
28
|
};
|
|
34
29
|
export default useTimeout;
|
package/es/useUnmount.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
|
|
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
|
+
import { useEffect } from 'react';
|
|
8
|
+
import useRtRef from './useRtRef';
|
|
2
9
|
const useUnmount = (cb) => {
|
|
3
|
-
const ref =
|
|
4
|
-
ref.current = cb;
|
|
10
|
+
const ref = useRtRef(cb);
|
|
5
11
|
useEffect(() => {
|
|
6
12
|
return () => {
|
|
7
13
|
ref.current();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @Author: apathyjade
|
|
3
|
+
* @Date: 2025-03-16 11:35:13
|
|
4
|
+
* @Last Modified by: apathyjade
|
|
5
|
+
* @Last Modified time: 2025-03-16 11:35:13
|
|
6
|
+
*/
|
|
7
|
+
import { useRef, useEffect } from 'react';
|
|
8
|
+
const useUpdateEffect = (cb, deps) => {
|
|
9
|
+
const ref = useRef(false);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
if (ref.current) {
|
|
12
|
+
return cb();
|
|
13
|
+
}
|
|
14
|
+
ref.current = true;
|
|
15
|
+
}, deps);
|
|
16
|
+
};
|
|
17
|
+
export default useUpdateEffect;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { useState, useEffect } from 'react';
|
|
9
9
|
import useRtCb from './useRtCb';
|
|
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
14
|
const updateValue = useRtCb((value) => {
|
|
@@ -25,4 +25,5 @@ export default function useRtState(value, onChange, opts) {
|
|
|
25
25
|
}
|
|
26
26
|
}, [value, oldValue, val]);
|
|
27
27
|
return [val, setVal];
|
|
28
|
-
}
|
|
28
|
+
};
|
|
29
|
+
export default useValue;
|
package/lib/index.js
CHANGED
|
@@ -3,43 +3,41 @@ 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.
|
|
7
|
-
//
|
|
8
|
-
var
|
|
9
|
-
Object.defineProperty(exports, "
|
|
10
|
-
var
|
|
11
|
-
Object.defineProperty(exports, "
|
|
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;
|
|
7
|
+
// 特殊state
|
|
8
|
+
var useBoolState_1 = require("./useBoolState");
|
|
9
|
+
Object.defineProperty(exports, "useBoolState", { enumerable: true, get: function () { return __importDefault(useBoolState_1).default; } });
|
|
10
|
+
var useValue_1 = require("./useValue");
|
|
11
|
+
Object.defineProperty(exports, "useValue", { enumerable: true, get: function () { return __importDefault(useValue_1).default; } });
|
|
12
|
+
var useOption_1 = require("./useOption");
|
|
13
|
+
Object.defineProperty(exports, "useOption", { enumerable: true, get: function () { return __importDefault(useOption_1).default; } });
|
|
12
14
|
// 传入参数实时更新,保证内部最新数据
|
|
13
15
|
var useRtRef_1 = require("./useRtRef");
|
|
14
16
|
Object.defineProperty(exports, "useRtRef", { enumerable: true, get: function () { return __importDefault(useRtRef_1).default; } });
|
|
15
|
-
var useRtState_1 = require("./useRtState");
|
|
16
|
-
Object.defineProperty(exports, "useRtState", { enumerable: true, get: function () { return __importDefault(useRtState_1).default; } });
|
|
17
17
|
var useRtCb_1 = require("./useRtCb");
|
|
18
18
|
Object.defineProperty(exports, "useRtCb", { enumerable: true, get: function () { return __importDefault(useRtCb_1).default; } });
|
|
19
|
-
var useRtEffect_1 = require("./useRtEffect"); // 保证卸载回调能拿到最新数据
|
|
20
|
-
Object.defineProperty(exports, "useRtEffect", { enumerable: true, get: function () { return __importDefault(useRtEffect_1).default; } });
|
|
21
|
-
// 特殊state
|
|
22
|
-
var useBoolState_1 = require("./useBoolState");
|
|
23
|
-
Object.defineProperty(exports, "useBoolState", { enumerable: true, get: function () { return __importDefault(useBoolState_1).default; } });
|
|
24
|
-
var useParamsState_1 = require("./useParamsState");
|
|
25
|
-
Object.defineProperty(exports, "useParamsState", { enumerable: true, get: function () { return __importDefault(useParamsState_1).default; } });
|
|
26
19
|
// 特殊 Effect
|
|
27
|
-
var
|
|
28
|
-
Object.defineProperty(exports, "useUpdateEffect", { enumerable: true, get: function () { return __importDefault(
|
|
29
|
-
//
|
|
30
|
-
var
|
|
31
|
-
Object.defineProperty(exports, "
|
|
20
|
+
var useUpdateEff_1 = require("./useUpdateEff");
|
|
21
|
+
Object.defineProperty(exports, "useUpdateEffect", { enumerable: true, get: function () { return __importDefault(useUpdateEff_1).default; } });
|
|
22
|
+
// 模拟生命周期
|
|
23
|
+
var useIsMounted_1 = require("./useIsMounted");
|
|
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; } });
|
|
32
27
|
var useCreate_1 = require("./useCreate");
|
|
33
28
|
Object.defineProperty(exports, "useCreate", { enumerable: true, get: function () { return __importDefault(useCreate_1).default; } });
|
|
34
29
|
var useMount_1 = require("./useMount");
|
|
35
30
|
Object.defineProperty(exports, "useMount", { enumerable: true, get: function () { return __importDefault(useMount_1).default; } });
|
|
36
31
|
var useUnmount_1 = require("./useUnmount");
|
|
37
32
|
Object.defineProperty(exports, "useUnmount", { enumerable: true, get: function () { return __importDefault(useUnmount_1).default; } });
|
|
38
|
-
//
|
|
39
|
-
var
|
|
40
|
-
Object.defineProperty(exports, "
|
|
33
|
+
// callback
|
|
34
|
+
var useIgnoreAbortErrCb_1 = require("./useIgnoreAbortErrCb");
|
|
35
|
+
Object.defineProperty(exports, "useIgnoreAbortErrCb", { enumerable: true, get: function () { return __importDefault(useIgnoreAbortErrCb_1).default; } });
|
|
36
|
+
// 防抖节流
|
|
41
37
|
var useDebounce_1 = require("./useDebounce");
|
|
42
38
|
Object.defineProperty(exports, "useDebounce", { enumerable: true, get: function () { return __importDefault(useDebounce_1).default; } });
|
|
39
|
+
var useThrottle_1 = require("./useThrottle");
|
|
40
|
+
Object.defineProperty(exports, "useThrottle", { enumerable: true, get: function () { return __importDefault(useThrottle_1).default; } });
|
|
43
41
|
// 使用异步
|
|
44
42
|
var useAsync_1 = require("./useAsync");
|
|
45
43
|
Object.defineProperty(exports, "useAsync", { enumerable: true, get: function () { return __importDefault(useAsync_1).default; } });
|
|
@@ -48,7 +46,5 @@ var useTimeout_1 = require("./useTimeout");
|
|
|
48
46
|
Object.defineProperty(exports, "useTimeout", { enumerable: true, get: function () { return __importDefault(useTimeout_1).default; } });
|
|
49
47
|
var useInterval_1 = require("./useInterval");
|
|
50
48
|
Object.defineProperty(exports, "useInterval", { enumerable: true, get: function () { return __importDefault(useInterval_1).default; } });
|
|
51
|
-
var useListener_1 = require("./useListener");
|
|
52
|
-
Object.defineProperty(exports, "useListener", { enumerable: true, get: function () { return __importDefault(useListener_1).default; } });
|
|
53
49
|
var useResizeObserver_1 = require("./useResizeObserver");
|
|
54
50
|
Object.defineProperty(exports, "useResizeObserver", { enumerable: true, get: function () { return __importDefault(useResizeObserver_1).default; } });
|