@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.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/index.d.ts +17 -0
  4. package/dist/index.js +17 -0
  5. package/dist/useBoolean/demo/demo1.d.ts +3 -0
  6. package/dist/useBoolean/demo/demo1.js +23 -0
  7. package/dist/useBoolean/index.d.ts +8 -0
  8. package/dist/useBoolean/index.js +25 -0
  9. package/dist/useCreation/demo/demo1.d.ts +6 -0
  10. package/dist/useCreation/demo/demo1.js +24 -0
  11. package/dist/useCreation/index.d.ts +3 -0
  12. package/dist/useCreation/index.js +17 -0
  13. package/dist/useDebounceFn/demo/demo1.d.ts +7 -0
  14. package/dist/useDebounceFn/demo/demo1.js +39 -0
  15. package/dist/useDebounceFn/demo/demo2.d.ts +7 -0
  16. package/dist/useDebounceFn/demo/demo2.js +29 -0
  17. package/dist/useDebounceFn/demo/demo3.d.ts +7 -0
  18. package/dist/useDebounceFn/demo/demo3.js +30 -0
  19. package/dist/useDebounceFn/index.d.ts +14 -0
  20. package/dist/useDebounceFn/index.js +28 -0
  21. package/dist/useDebounceValue/demo/demo1.d.ts +7 -0
  22. package/dist/useDebounceValue/demo/demo1.js +31 -0
  23. package/dist/useDebounceValue/index.d.ts +8 -0
  24. package/dist/useDebounceValue/index.js +18 -0
  25. package/dist/useEventEmitter/index.d.ts +2 -0
  26. package/dist/useEventEmitter/index.js +2 -0
  27. package/dist/useInterval/demo/demo1.d.ts +7 -0
  28. package/dist/useInterval/demo/demo1.js +18 -0
  29. package/dist/useInterval/demo/demo2.d.ts +7 -0
  30. package/dist/useInterval/demo/demo2.js +45 -0
  31. package/dist/useInterval/index.d.ts +3 -0
  32. package/dist/useInterval/index.js +29 -0
  33. package/dist/useLatest/demo/demo1.d.ts +7 -0
  34. package/dist/useLatest/demo/demo1.js +38 -0
  35. package/dist/useLatest/index.d.ts +3 -0
  36. package/dist/useLatest/index.js +7 -0
  37. package/dist/useMap/demo/demo1.d.ts +7 -0
  38. package/dist/useMap/demo/demo1.js +51 -0
  39. package/dist/useMap/index.d.ts +9 -0
  40. package/dist/useMap/index.js +46 -0
  41. package/dist/useMemoizedFn/demo/demo1.d.ts +7 -0
  42. package/dist/useMemoizedFn/demo/demo1.js +45 -0
  43. package/dist/useMemoizedFn/demo/demo2.d.ts +3 -0
  44. package/dist/useMemoizedFn/demo/demo2.js +48 -0
  45. package/dist/useMemoizedFn/index.d.ts +3 -0
  46. package/dist/useMemoizedFn/index.js +21 -0
  47. package/dist/useMount/demo/demo1.d.ts +7 -0
  48. package/dist/useMount/demo/demo1.js +24 -0
  49. package/dist/useMount/index.d.ts +2 -0
  50. package/dist/useMount/index.js +7 -0
  51. package/dist/useSet/demo/demo1.d.ts +3 -0
  52. package/dist/useSet/demo/demo1.js +36 -0
  53. package/dist/useSet/index.d.ts +6 -0
  54. package/dist/useSet/index.js +41 -0
  55. package/dist/useThrottleFn/demo/demo1.d.ts +7 -0
  56. package/dist/useThrottleFn/demo/demo1.js +39 -0
  57. package/dist/useThrottleFn/demo/demo2.d.ts +7 -0
  58. package/dist/useThrottleFn/demo/demo2.js +29 -0
  59. package/dist/useThrottleFn/index.d.ts +13 -0
  60. package/dist/useThrottleFn/index.js +28 -0
  61. package/dist/useThrottleValue/demo/demo1.d.ts +7 -0
  62. package/dist/useThrottleValue/demo/demo1.js +31 -0
  63. package/dist/useThrottleValue/index.d.ts +7 -0
  64. package/dist/useThrottleValue/index.js +18 -0
  65. package/dist/useTimeout/demo/demo1.d.ts +7 -0
  66. package/dist/useTimeout/demo/demo1.js +19 -0
  67. package/dist/useTimeout/demo/demo2.d.ts +7 -0
  68. package/dist/useTimeout/demo/demo2.js +43 -0
  69. package/dist/useTimeout/index.d.ts +3 -0
  70. package/dist/useTimeout/index.js +22 -0
  71. package/dist/useToggle/demo/demo1.d.ts +7 -0
  72. package/dist/useToggle/demo/demo1.js +32 -0
  73. package/dist/useToggle/demo/demo2.d.ts +7 -0
  74. package/dist/useToggle/demo/demo2.js +45 -0
  75. package/dist/useToggle/demo/demo3.d.ts +7 -0
  76. package/dist/useToggle/demo/demo3.js +32 -0
  77. package/dist/useToggle/index.d.ts +10 -0
  78. package/dist/useToggle/index.js +35 -0
  79. package/dist/useUnmount/demo/demo1.d.ts +7 -0
  80. package/dist/useUnmount/demo/demo1.js +24 -0
  81. package/dist/useUnmount/index.d.ts +2 -0
  82. package/dist/useUnmount/index.js +13 -0
  83. package/dist/useUpdate/demo/demo1.d.ts +7 -0
  84. package/dist/useUpdate/demo/demo1.js +17 -0
  85. package/dist/useUpdate/index.d.ts +2 -0
  86. package/dist/useUpdate/index.js +13 -0
  87. package/dist/utils/isSameDep.d.ts +3 -0
  88. package/dist/utils/isSameDep.js +7 -0
  89. 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,3 @@
1
+ type FnType = () => void;
2
+ declare const useTimeout: (callback: FnType, delay?: number) => FnType;
3
+ export default useTimeout;
@@ -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,7 @@
1
+ /**
2
+ * title: 案例
3
+ * description: 当不接收任何参数时,默认为 boolean 切换,其中默认值为 false。
4
+ */
5
+ import { FC } from 'react';
6
+ declare const DemoOne: FC;
7
+ export default DemoOne;
@@ -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,7 @@
1
+ /**
2
+ * title: 案例
3
+ * description: 接受两个可选参数,在它们之间进行切换。
4
+ */
5
+ import { FC } from 'react';
6
+ declare const DemoThree: FC;
7
+ export default DemoThree;
@@ -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,7 @@
1
+ /**
2
+ * title: 案例
3
+ * description: 接受一个可选参数,取反时设置为!defaultValue。
4
+ */
5
+ import { FC } from 'react';
6
+ declare const DemoTwo: FC;
7
+ export default DemoTwo;
@@ -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,7 @@
1
+ /**
2
+ * title: 案例
3
+ * description: 在组件卸载时,执行函数。
4
+ */
5
+ import React from 'react';
6
+ declare const _default: () => React.JSX.Element;
7
+ export default _default;
@@ -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,2 @@
1
+ declare const useUnmount: (callback: () => void) => void;
2
+ export default useUnmount;
@@ -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,7 @@
1
+ /**
2
+ * title: 基础用法
3
+ * desc: 强制组件重新渲染。
4
+ */
5
+ import React from 'react';
6
+ declare const _default: () => React.JSX.Element;
7
+ export default _default;
@@ -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,2 @@
1
+ declare const useUpdate: () => () => void;
2
+ export default useUpdate;
@@ -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;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ declare const isSameDep: (oldDep: import("react").DependencyList, newDep: import("react").DependencyList) => boolean;
3
+ export default isSameDep;
@@ -0,0 +1,7 @@
1
+ var isSameDep = function isSameDep(oldDep, newDep) {
2
+ if (oldDep.length !== newDep.length) return false;
3
+ return oldDep.every(function (item, index) {
4
+ return Object.is(item, newDep[index]);
5
+ });
6
+ };
7
+ export default isSameDep;
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
+ }