@csshero/usehooks 0.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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +17 -0
- package/dist/useBoolean/demo/demo1.d.ts +3 -0
- package/dist/useBoolean/demo/demo1.js +23 -0
- package/dist/useBoolean/index.d.ts +8 -0
- package/dist/useBoolean/index.js +25 -0
- package/dist/useCreation/demo/demo1.d.ts +6 -0
- package/dist/useCreation/demo/demo1.js +24 -0
- package/dist/useCreation/index.d.ts +3 -0
- package/dist/useCreation/index.js +17 -0
- package/dist/useDebounceFn/demo/demo1.d.ts +7 -0
- package/dist/useDebounceFn/demo/demo1.js +39 -0
- package/dist/useDebounceFn/demo/demo2.d.ts +7 -0
- package/dist/useDebounceFn/demo/demo2.js +29 -0
- package/dist/useDebounceFn/demo/demo3.d.ts +7 -0
- package/dist/useDebounceFn/demo/demo3.js +30 -0
- package/dist/useDebounceFn/index.d.ts +14 -0
- package/dist/useDebounceFn/index.js +28 -0
- package/dist/useDebounceValue/demo/demo1.d.ts +7 -0
- package/dist/useDebounceValue/demo/demo1.js +31 -0
- package/dist/useDebounceValue/index.d.ts +8 -0
- package/dist/useDebounceValue/index.js +18 -0
- package/dist/useEventEmitter/index.d.ts +2 -0
- package/dist/useEventEmitter/index.js +2 -0
- package/dist/useInterval/demo/demo1.d.ts +7 -0
- package/dist/useInterval/demo/demo1.js +18 -0
- package/dist/useInterval/demo/demo2.d.ts +7 -0
- package/dist/useInterval/demo/demo2.js +45 -0
- package/dist/useInterval/index.d.ts +3 -0
- package/dist/useInterval/index.js +29 -0
- package/dist/useLatest/demo/demo1.d.ts +7 -0
- package/dist/useLatest/demo/demo1.js +38 -0
- package/dist/useLatest/index.d.ts +3 -0
- package/dist/useLatest/index.js +7 -0
- package/dist/useMap/demo/demo1.d.ts +7 -0
- package/dist/useMap/demo/demo1.js +51 -0
- package/dist/useMap/index.d.ts +9 -0
- package/dist/useMap/index.js +46 -0
- package/dist/useMemoizedFn/demo/demo1.d.ts +7 -0
- package/dist/useMemoizedFn/demo/demo1.js +45 -0
- package/dist/useMemoizedFn/demo/demo2.d.ts +3 -0
- package/dist/useMemoizedFn/demo/demo2.js +48 -0
- package/dist/useMemoizedFn/index.d.ts +3 -0
- package/dist/useMemoizedFn/index.js +21 -0
- package/dist/useMount/demo/demo1.d.ts +7 -0
- package/dist/useMount/demo/demo1.js +24 -0
- package/dist/useMount/index.d.ts +2 -0
- package/dist/useMount/index.js +7 -0
- package/dist/useSet/demo/demo1.d.ts +3 -0
- package/dist/useSet/demo/demo1.js +36 -0
- package/dist/useSet/index.d.ts +6 -0
- package/dist/useSet/index.js +41 -0
- package/dist/useThrottleFn/demo/demo1.d.ts +7 -0
- package/dist/useThrottleFn/demo/demo1.js +39 -0
- package/dist/useThrottleFn/demo/demo2.d.ts +7 -0
- package/dist/useThrottleFn/demo/demo2.js +29 -0
- package/dist/useThrottleFn/index.d.ts +13 -0
- package/dist/useThrottleFn/index.js +28 -0
- package/dist/useThrottleValue/demo/demo1.d.ts +7 -0
- package/dist/useThrottleValue/demo/demo1.js +31 -0
- package/dist/useThrottleValue/index.d.ts +7 -0
- package/dist/useThrottleValue/index.js +18 -0
- package/dist/useTimeout/demo/demo1.d.ts +7 -0
- package/dist/useTimeout/demo/demo1.js +19 -0
- package/dist/useTimeout/demo/demo2.d.ts +7 -0
- package/dist/useTimeout/demo/demo2.js +43 -0
- package/dist/useTimeout/index.d.ts +3 -0
- package/dist/useTimeout/index.js +22 -0
- package/dist/useToggle/demo/demo1.d.ts +7 -0
- package/dist/useToggle/demo/demo1.js +32 -0
- package/dist/useToggle/demo/demo2.d.ts +7 -0
- package/dist/useToggle/demo/demo2.js +45 -0
- package/dist/useToggle/demo/demo3.d.ts +7 -0
- package/dist/useToggle/demo/demo3.js +32 -0
- package/dist/useToggle/index.d.ts +10 -0
- package/dist/useToggle/index.js +35 -0
- package/dist/useUnmount/demo/demo1.d.ts +7 -0
- package/dist/useUnmount/demo/demo1.js +24 -0
- package/dist/useUnmount/index.d.ts +2 -0
- package/dist/useUnmount/index.js +13 -0
- package/dist/useUpdate/demo/demo1.d.ts +7 -0
- package/dist/useUpdate/demo/demo1.js +17 -0
- package/dist/useUpdate/index.d.ts +2 -0
- package/dist/useUpdate/index.js +13 -0
- package/dist/utils/isSameDep.d.ts +3 -0
- package/dist/utils/isSameDep.js +7 -0
- package/package.json +81 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
2
|
+
/**
|
3
|
+
* title: 案例
|
4
|
+
* description: 动态修改 delay 以实现定时器间隔变化与暂停。
|
5
|
+
*/
|
6
|
+
|
7
|
+
import { useTimeout } from "../..";
|
8
|
+
import React, { useState } from 'react';
|
9
|
+
var DemoTwo = function DemoTwo() {
|
10
|
+
var _useState = useState(0),
|
11
|
+
_useState2 = _slicedToArray(_useState, 2),
|
12
|
+
count = _useState2[0],
|
13
|
+
setCount = _useState2[1];
|
14
|
+
var _useState3 = useState(2000),
|
15
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
16
|
+
delay = _useState4[0],
|
17
|
+
setDelay = _useState4[1];
|
18
|
+
var clear = useTimeout(function () {
|
19
|
+
setCount(count + 1);
|
20
|
+
}, delay);
|
21
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, "count: ", count), /*#__PURE__*/React.createElement("div", {
|
22
|
+
style: {
|
23
|
+
marginBottom: '8px'
|
24
|
+
}
|
25
|
+
}, "delay: ", delay), /*#__PURE__*/React.createElement("button", {
|
26
|
+
type: "button",
|
27
|
+
onClick: function onClick() {
|
28
|
+
return setDelay(delay + 1000);
|
29
|
+
}
|
30
|
+
}, "delay + 1000"), /*#__PURE__*/React.createElement("button", {
|
31
|
+
type: "button",
|
32
|
+
onClick: function onClick() {
|
33
|
+
return setDelay(2000);
|
34
|
+
},
|
35
|
+
style: {
|
36
|
+
margin: '0 8px'
|
37
|
+
}
|
38
|
+
}, "reset delay"), /*#__PURE__*/React.createElement("button", {
|
39
|
+
type: "button",
|
40
|
+
onClick: clear
|
41
|
+
}, "clear"));
|
42
|
+
};
|
43
|
+
export default DemoTwo;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
2
|
+
var useTimeout = function useTimeout(callback) {
|
3
|
+
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
|
4
|
+
var timer = useRef();
|
5
|
+
var callbackRef = useRef(callback);
|
6
|
+
var clearFn = useCallback(function () {
|
7
|
+
return clearTimeout(timer.current);
|
8
|
+
}, []);
|
9
|
+
|
10
|
+
// 更新 ref 中的 callback
|
11
|
+
useEffect(function () {
|
12
|
+
callbackRef.current = callback;
|
13
|
+
}, [callback]);
|
14
|
+
useEffect(function () {
|
15
|
+
timer.current = setTimeout(function () {
|
16
|
+
callbackRef.current();
|
17
|
+
}, delay);
|
18
|
+
return clearFn;
|
19
|
+
}, [delay]);
|
20
|
+
return clearFn;
|
21
|
+
};
|
22
|
+
export default useTimeout;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
2
|
+
/**
|
3
|
+
* title: 案例
|
4
|
+
* description: 当不接收任何参数时,默认为 boolean 切换,其中默认值为 false。
|
5
|
+
*/
|
6
|
+
|
7
|
+
import { useToggle } from "../..";
|
8
|
+
import React from 'react';
|
9
|
+
var DemoOne = function DemoOne() {
|
10
|
+
var _useToggle = useToggle(false),
|
11
|
+
_useToggle2 = _slicedToArray(_useToggle, 2),
|
12
|
+
value = _useToggle2[0],
|
13
|
+
action = _useToggle2[1];
|
14
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
15
|
+
style: {
|
16
|
+
marginBottom: '8px'
|
17
|
+
}
|
18
|
+
}, "Effects: ", value.toString()), /*#__PURE__*/React.createElement("button", {
|
19
|
+
type: "button",
|
20
|
+
onClick: action.toggle
|
21
|
+
}, "toggle"), /*#__PURE__*/React.createElement("button", {
|
22
|
+
type: "button",
|
23
|
+
onClick: action.setToDefault,
|
24
|
+
style: {
|
25
|
+
margin: '0 8px'
|
26
|
+
}
|
27
|
+
}, "setDefalut"), /*#__PURE__*/React.createElement("button", {
|
28
|
+
type: "button",
|
29
|
+
onClick: action.setToReverse
|
30
|
+
}, "setReverse"));
|
31
|
+
};
|
32
|
+
export default DemoOne;
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
2
|
+
/**
|
3
|
+
* title: 案例
|
4
|
+
* description: 接受两个可选参数,在它们之间进行切换。
|
5
|
+
*/
|
6
|
+
|
7
|
+
import { useToggle } from "../..";
|
8
|
+
import React from 'react';
|
9
|
+
var DemoThree = function DemoThree() {
|
10
|
+
var _useToggle = useToggle('Hello', 'World'),
|
11
|
+
_useToggle2 = _slicedToArray(_useToggle, 2),
|
12
|
+
value = _useToggle2[0],
|
13
|
+
action = _useToggle2[1];
|
14
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
15
|
+
style: {
|
16
|
+
marginBottom: '8px'
|
17
|
+
}
|
18
|
+
}, "Effects: ", value.toString()), /*#__PURE__*/React.createElement("button", {
|
19
|
+
type: "button",
|
20
|
+
onClick: action.toggle
|
21
|
+
}, "toggle"), /*#__PURE__*/React.createElement("button", {
|
22
|
+
type: "button",
|
23
|
+
onClick: action.setToDefault,
|
24
|
+
style: {
|
25
|
+
margin: '0 8px'
|
26
|
+
}
|
27
|
+
}, "setDefalut"), /*#__PURE__*/React.createElement("button", {
|
28
|
+
type: "button",
|
29
|
+
onClick: action.setToReverse
|
30
|
+
}, "setReverse"), /*#__PURE__*/React.createElement("button", {
|
31
|
+
type: "button",
|
32
|
+
onClick: function onClick() {
|
33
|
+
return action.set('Hello');
|
34
|
+
},
|
35
|
+
style: {
|
36
|
+
margin: '0 8px'
|
37
|
+
}
|
38
|
+
}, "setHello"), /*#__PURE__*/React.createElement("button", {
|
39
|
+
type: "button",
|
40
|
+
onClick: function onClick() {
|
41
|
+
return action.set('World');
|
42
|
+
}
|
43
|
+
}, "setWorld"));
|
44
|
+
};
|
45
|
+
export default DemoThree;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
2
|
+
/**
|
3
|
+
* title: 案例
|
4
|
+
* description: 接受一个可选参数,取反时设置为!defaultValue。
|
5
|
+
*/
|
6
|
+
|
7
|
+
import { useToggle } from "../..";
|
8
|
+
import React from 'react';
|
9
|
+
var DemoTwo = function DemoTwo() {
|
10
|
+
var _useToggle = useToggle('true'),
|
11
|
+
_useToggle2 = _slicedToArray(_useToggle, 2),
|
12
|
+
value = _useToggle2[0],
|
13
|
+
action = _useToggle2[1];
|
14
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
15
|
+
style: {
|
16
|
+
marginBottom: '8px'
|
17
|
+
}
|
18
|
+
}, "Effects: ", value.toString()), /*#__PURE__*/React.createElement("button", {
|
19
|
+
type: "button",
|
20
|
+
onClick: action.toggle
|
21
|
+
}, "toggle"), /*#__PURE__*/React.createElement("button", {
|
22
|
+
type: "button",
|
23
|
+
onClick: action.setToDefault,
|
24
|
+
style: {
|
25
|
+
margin: '0 8px'
|
26
|
+
}
|
27
|
+
}, "setDefalut"), /*#__PURE__*/React.createElement("button", {
|
28
|
+
type: "button",
|
29
|
+
onClick: action.setToReverse
|
30
|
+
}, "setReverse"));
|
31
|
+
};
|
32
|
+
export default DemoTwo;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
interface Actions<T> {
|
2
|
+
set: (value: T) => void;
|
3
|
+
setToDefault: () => void;
|
4
|
+
setToReverse: () => void;
|
5
|
+
toggle: () => void;
|
6
|
+
}
|
7
|
+
declare function useToggle(): [boolean, Actions<boolean>];
|
8
|
+
declare function useToggle<T>(defaultValue: T): [T, Actions<T>];
|
9
|
+
declare function useToggle<T, R>(defaultValue: T, reverseValue: R): [T, Actions<T | R>];
|
10
|
+
export default useToggle;
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
2
|
+
import { useMemo, useState } from 'react';
|
3
|
+
function useToggle() {
|
4
|
+
var defaultValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
5
|
+
var reverseValue = arguments.length > 1 ? arguments[1] : undefined;
|
6
|
+
var _useState = useState(defaultValue),
|
7
|
+
_useState2 = _slicedToArray(_useState, 2),
|
8
|
+
value = _useState2[0],
|
9
|
+
setValue = _useState2[1];
|
10
|
+
var actions = useMemo(function () {
|
11
|
+
var reverseValueOrigin = reverseValue === undefined ? !defaultValue : reverseValue;
|
12
|
+
var toggle = function toggle() {
|
13
|
+
setValue(function (v) {
|
14
|
+
return v === defaultValue ? reverseValueOrigin : defaultValue;
|
15
|
+
});
|
16
|
+
};
|
17
|
+
var setToDefault = function setToDefault() {
|
18
|
+
return setValue(defaultValue);
|
19
|
+
};
|
20
|
+
var setToReverse = function setToReverse() {
|
21
|
+
return setValue(reverseValueOrigin);
|
22
|
+
};
|
23
|
+
var set = function set(v) {
|
24
|
+
return setValue(v);
|
25
|
+
};
|
26
|
+
return {
|
27
|
+
toggle: toggle,
|
28
|
+
setToDefault: setToDefault,
|
29
|
+
setToReverse: setToReverse,
|
30
|
+
set: set
|
31
|
+
};
|
32
|
+
}, []);
|
33
|
+
return [value, actions];
|
34
|
+
}
|
35
|
+
export default useToggle;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
2
|
+
/**
|
3
|
+
* title: 案例
|
4
|
+
* description: 在组件卸载时,执行函数。
|
5
|
+
*/
|
6
|
+
|
7
|
+
import { useBoolean, useUnmount } from "../..";
|
8
|
+
import React from 'react';
|
9
|
+
var MyComponent = function MyComponent() {
|
10
|
+
useUnmount(function () {
|
11
|
+
alert('组件卸载,执行传入函数。');
|
12
|
+
});
|
13
|
+
return /*#__PURE__*/React.createElement("p", null, "Hello World!");
|
14
|
+
};
|
15
|
+
export default (function () {
|
16
|
+
var _useBoolean = useBoolean(true),
|
17
|
+
_useBoolean2 = _slicedToArray(_useBoolean, 2),
|
18
|
+
state = _useBoolean2[0],
|
19
|
+
toggle = _useBoolean2[1].toggle;
|
20
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("button", {
|
21
|
+
type: "button",
|
22
|
+
onClick: toggle
|
23
|
+
}, state ? '卸载组件' : '挂载组件'), state && /*#__PURE__*/React.createElement(MyComponent, null));
|
24
|
+
});
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { useEffect } from 'react';
|
2
|
+
import useLatest from "../useLatest";
|
3
|
+
var useUnmount = function useUnmount(callback) {
|
4
|
+
var CallbackRef = useLatest(callback);
|
5
|
+
|
6
|
+
// 返回值中调用fn的最新值
|
7
|
+
useEffect(function () {
|
8
|
+
return function () {
|
9
|
+
return CallbackRef.current();
|
10
|
+
};
|
11
|
+
}, []);
|
12
|
+
};
|
13
|
+
export default useUnmount;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
/**
|
2
|
+
* title: 基础用法
|
3
|
+
* desc: 强制组件重新渲染。
|
4
|
+
*/
|
5
|
+
|
6
|
+
import { useUpdate } from "../..";
|
7
|
+
import React from 'react';
|
8
|
+
export default (function () {
|
9
|
+
var update = useUpdate();
|
10
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", null, "Time: ", Date.now()), /*#__PURE__*/React.createElement("button", {
|
11
|
+
type: "button",
|
12
|
+
onClick: update,
|
13
|
+
style: {
|
14
|
+
marginTop: 8
|
15
|
+
}
|
16
|
+
}, "update"));
|
17
|
+
});
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
2
|
+
import { useState } from 'react';
|
3
|
+
import useMemoizedFn from "../useMemoizedFn";
|
4
|
+
var useUpdate = function useUpdate() {
|
5
|
+
var _useState = useState({}),
|
6
|
+
_useState2 = _slicedToArray(_useState, 2),
|
7
|
+
setState = _useState2[1];
|
8
|
+
var updata = useMemoizedFn(function () {
|
9
|
+
return setState({});
|
10
|
+
});
|
11
|
+
return updata;
|
12
|
+
};
|
13
|
+
export default useUpdate;
|
package/package.json
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
{
|
2
|
+
"name": "@csshero/usehooks",
|
3
|
+
"version": "0.1.0",
|
4
|
+
"description": "a react hooks library",
|
5
|
+
"license": "MIT",
|
6
|
+
"module": "dist/index.js",
|
7
|
+
"types": "dist/index.d.ts",
|
8
|
+
"files": [
|
9
|
+
"dist"
|
10
|
+
],
|
11
|
+
"scripts": {
|
12
|
+
"build": "father build",
|
13
|
+
"build:watch": "father dev",
|
14
|
+
"dev": "dumi dev",
|
15
|
+
"docs:build": "dumi build",
|
16
|
+
"docs:preview": "dumi preview",
|
17
|
+
"doctor": "father doctor",
|
18
|
+
"lint": "pnpm run lint:es && pnpm run lint:css",
|
19
|
+
"lint:css": "stylelint \"{src,test}/**/*.{css,less}\"",
|
20
|
+
"lint:es": "eslint \"{src,test}/**/*.{js,jsx,ts,tsx}\"",
|
21
|
+
"prepare": "husky install && dumi setup",
|
22
|
+
"prepublishOnly": "father doctor && pnpm run build",
|
23
|
+
"start": "pnpm run dev"
|
24
|
+
},
|
25
|
+
"commitlint": {
|
26
|
+
"extends": [
|
27
|
+
"@commitlint/config-conventional"
|
28
|
+
]
|
29
|
+
},
|
30
|
+
"lint-staged": {
|
31
|
+
"*.{md,json}": [
|
32
|
+
"prettier --write --no-error-on-unmatched-pattern"
|
33
|
+
],
|
34
|
+
"*.{css,less}": [
|
35
|
+
"stylelint --fix",
|
36
|
+
"prettier --write"
|
37
|
+
],
|
38
|
+
"*.{js,jsx}": [
|
39
|
+
"eslint --fix",
|
40
|
+
"prettier --write"
|
41
|
+
],
|
42
|
+
"*.{ts,tsx}": [
|
43
|
+
"eslint --fix",
|
44
|
+
"prettier --parser=typescript --write"
|
45
|
+
]
|
46
|
+
},
|
47
|
+
"dependencies": {
|
48
|
+
"@babel/runtime": "^7.26.0",
|
49
|
+
"lodash-es": "^4.17.21"
|
50
|
+
},
|
51
|
+
"devDependencies": {
|
52
|
+
"@commitlint/cli": "^17.1.2",
|
53
|
+
"@commitlint/config-conventional": "^17.1.0",
|
54
|
+
"@types/lodash-es": "^4.17.12",
|
55
|
+
"@types/react": "^18.0.0",
|
56
|
+
"@types/react-dom": "^18.0.0",
|
57
|
+
"@umijs/lint": "^4.0.0",
|
58
|
+
"dumi": "^2.4.13",
|
59
|
+
"dumi-theme-antd-style": "^0.31.1",
|
60
|
+
"eslint": "^8.23.0",
|
61
|
+
"father": "^4.1.0",
|
62
|
+
"husky": "^8.0.1",
|
63
|
+
"lint-staged": "^13.0.3",
|
64
|
+
"prettier": "^2.7.1",
|
65
|
+
"prettier-plugin-organize-imports": "^3.0.0",
|
66
|
+
"prettier-plugin-packagejson": "^2.2.18",
|
67
|
+
"react": "^18.0.0",
|
68
|
+
"react-dom": "^18.0.0",
|
69
|
+
"stylelint": "^14.9.1"
|
70
|
+
},
|
71
|
+
"peerDependencies": {
|
72
|
+
"react": ">=16.9.0",
|
73
|
+
"react-dom": ">=16.9.0"
|
74
|
+
},
|
75
|
+
"publishConfig": {
|
76
|
+
"access": "public"
|
77
|
+
},
|
78
|
+
"authors": [
|
79
|
+
"cssheo"
|
80
|
+
]
|
81
|
+
}
|