@pdg/react-hook 1.0.39 → 1.0.40
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/dist/index.esm.js +64 -65
- package/dist/index.js +64 -65
- package/package.json +2 -2
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {useRef,useEffect,useLayoutEffect,useState,useCallback}from'react';function useFirstSkipEffect(effect, deps) {
|
|
2
|
-
|
|
3
|
-
useEffect(
|
|
2
|
+
const firstRef = useRef(true);
|
|
3
|
+
useEffect(() => {
|
|
4
4
|
if (firstRef.current) {
|
|
5
5
|
firstRef.current = false;
|
|
6
6
|
}
|
|
@@ -10,8 +10,8 @@ import {useRef,useEffect,useLayoutEffect,useState,useCallback}from'react';functi
|
|
|
10
10
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
11
11
|
}, deps);
|
|
12
12
|
}function useFirstSkipLayoutEffect(effect, deps) {
|
|
13
|
-
|
|
14
|
-
useLayoutEffect(
|
|
13
|
+
const firstRef = useRef(true);
|
|
14
|
+
useLayoutEffect(() => {
|
|
15
15
|
if (firstRef.current) {
|
|
16
16
|
firstRef.current = false;
|
|
17
17
|
}
|
|
@@ -21,14 +21,14 @@ import {useRef,useEffect,useLayoutEffect,useState,useCallback}from'react';functi
|
|
|
21
21
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
22
22
|
}, deps);
|
|
23
23
|
}function useAutoForceUpdate(interval) {
|
|
24
|
-
|
|
25
|
-
useEffect(
|
|
26
|
-
|
|
27
|
-
setTick(
|
|
24
|
+
const [, setTick] = useState(0);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const tm = setInterval(() => {
|
|
27
|
+
setTick((old) => {
|
|
28
28
|
return old + 1;
|
|
29
29
|
});
|
|
30
30
|
}, interval);
|
|
31
|
-
return
|
|
31
|
+
return () => {
|
|
32
32
|
clearInterval(tm);
|
|
33
33
|
};
|
|
34
34
|
}, [interval]);
|
|
@@ -43,45 +43,45 @@ import {useRef,useEffect,useLayoutEffect,useState,useCallback}from'react';functi
|
|
|
43
43
|
ref.current = undefined;
|
|
44
44
|
}
|
|
45
45
|
}function useIntervalRef() {
|
|
46
|
-
|
|
47
|
-
useEffect(
|
|
48
|
-
return
|
|
46
|
+
const ref = useRef(undefined);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
return () => {
|
|
49
49
|
clearIntervalRef(ref);
|
|
50
50
|
};
|
|
51
51
|
}, []);
|
|
52
|
-
|
|
52
|
+
const setIntervalFunc = useCallback((callback, ms) => {
|
|
53
53
|
clearIntervalRef(ref);
|
|
54
|
-
ref.current = setInterval(
|
|
54
|
+
ref.current = setInterval(() => {
|
|
55
55
|
callback(ref);
|
|
56
56
|
}, ms);
|
|
57
57
|
}, []);
|
|
58
58
|
return [ref, setIntervalFunc];
|
|
59
59
|
}function useTimeoutRef() {
|
|
60
|
-
|
|
61
|
-
useEffect(
|
|
62
|
-
return
|
|
60
|
+
const ref = useRef(undefined);
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
return () => {
|
|
63
63
|
clearTimeoutRef(ref);
|
|
64
64
|
};
|
|
65
65
|
}, []);
|
|
66
|
-
|
|
66
|
+
const setTimeoutFunc = useCallback((callback, ms) => {
|
|
67
67
|
clearTimeoutRef(ref);
|
|
68
|
-
ref.current = setTimeout(
|
|
68
|
+
ref.current = setTimeout(() => {
|
|
69
69
|
ref.current = undefined;
|
|
70
70
|
callback();
|
|
71
71
|
}, ms);
|
|
72
72
|
}, []);
|
|
73
73
|
return [ref, setTimeoutFunc];
|
|
74
74
|
}function useForceUpdate(delayMilliseconds) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return useCallback(
|
|
75
|
+
const [, setDelayTimeout] = useTimeoutRef();
|
|
76
|
+
const [, setValue] = useState(0);
|
|
77
|
+
return useCallback((delay) => {
|
|
78
78
|
if (ifUndefined(delay, delayMilliseconds) !== undefined) {
|
|
79
|
-
setDelayTimeout(
|
|
80
|
-
setValue(
|
|
79
|
+
setDelayTimeout(() => {
|
|
80
|
+
setValue((old) => old + 1);
|
|
81
81
|
}, ifUndefined(delay, delayMilliseconds));
|
|
82
82
|
}
|
|
83
83
|
else {
|
|
84
|
-
setValue(
|
|
84
|
+
setValue((old) => old + 1);
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
87
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -93,7 +93,7 @@ import {useRef,useEffect,useLayoutEffect,useState,useCallback}from'react';functi
|
|
|
93
93
|
function ifUndefined(v, v2) {
|
|
94
94
|
return v === undefined ? v2 : v;
|
|
95
95
|
}function useForwardLayoutRef(ref, value, onSet, onUnset) {
|
|
96
|
-
useLayoutEffect(
|
|
96
|
+
useLayoutEffect(() => {
|
|
97
97
|
onSet === null || onSet === void 0 ? void 0 : onSet(value);
|
|
98
98
|
if (ref) {
|
|
99
99
|
if (typeof ref === 'function') {
|
|
@@ -103,7 +103,7 @@ function ifUndefined(v, v2) {
|
|
|
103
103
|
ref.current = value;
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
return
|
|
106
|
+
return () => {
|
|
107
107
|
onUnset === null || onUnset === void 0 ? void 0 : onUnset();
|
|
108
108
|
if (ref) {
|
|
109
109
|
if (typeof ref === 'function') {
|
|
@@ -116,7 +116,7 @@ function ifUndefined(v, v2) {
|
|
|
116
116
|
};
|
|
117
117
|
}, [onSet, onUnset, ref, value]);
|
|
118
118
|
}function useForwardRef(ref, value, onSet, onUnset) {
|
|
119
|
-
useEffect(
|
|
119
|
+
useEffect(() => {
|
|
120
120
|
onSet === null || onSet === void 0 ? void 0 : onSet(value);
|
|
121
121
|
if (ref) {
|
|
122
122
|
if (typeof ref === 'function') {
|
|
@@ -126,7 +126,7 @@ function ifUndefined(v, v2) {
|
|
|
126
126
|
ref.current = value;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
return
|
|
129
|
+
return () => {
|
|
130
130
|
onUnset === null || onUnset === void 0 ? void 0 : onUnset();
|
|
131
131
|
if (ref) {
|
|
132
132
|
if (typeof ref === 'function') {
|
|
@@ -138,57 +138,56 @@ function ifUndefined(v, v2) {
|
|
|
138
138
|
}
|
|
139
139
|
};
|
|
140
140
|
}, [onSet, onUnset, ref, value]);
|
|
141
|
-
}function useMountedRef(initialValue) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
useEffect(function () {
|
|
141
|
+
}function useMountedRef(initialValue = true) {
|
|
142
|
+
const isMountedRef = useRef(initialValue);
|
|
143
|
+
useEffect(() => {
|
|
145
144
|
isMountedRef.current = true;
|
|
146
|
-
return
|
|
145
|
+
return () => {
|
|
147
146
|
isMountedRef.current = false;
|
|
148
147
|
};
|
|
149
148
|
}, []);
|
|
150
149
|
return isMountedRef;
|
|
151
150
|
}function useLayoutPerformance(name) {
|
|
152
|
-
|
|
153
|
-
useLayoutEffect(
|
|
151
|
+
const beginTime = performance.now();
|
|
152
|
+
useLayoutEffect(() => {
|
|
154
153
|
console.log('Layout Performance', '-', name, performance.now() - beginTime);
|
|
155
154
|
});
|
|
156
155
|
}function usePerformance(name) {
|
|
157
|
-
|
|
158
|
-
useEffect(
|
|
156
|
+
const beginTime = performance.now();
|
|
157
|
+
useEffect(() => {
|
|
159
158
|
console.log('Performance', '-', name, performance.now() - beginTime);
|
|
160
159
|
});
|
|
161
160
|
}function useAutoUpdateLayoutRef(value) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
useFirstSkipLayoutEffect(
|
|
161
|
+
const valueRef = useRef(value);
|
|
162
|
+
const [, setUpdateValue] = useState(0);
|
|
163
|
+
useFirstSkipLayoutEffect(() => {
|
|
165
164
|
valueRef.current = value;
|
|
166
|
-
setUpdateValue(
|
|
165
|
+
setUpdateValue((prev) => prev + 1);
|
|
167
166
|
}, [value]);
|
|
168
167
|
return valueRef;
|
|
169
168
|
}function useAutoUpdateRef(value) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
useFirstSkipEffect(
|
|
169
|
+
const valueRef = useRef(value);
|
|
170
|
+
const [, setUpdateValue] = useState(0);
|
|
171
|
+
useFirstSkipEffect(() => {
|
|
173
172
|
valueRef.current = value;
|
|
174
|
-
setUpdateValue(
|
|
173
|
+
setUpdateValue((prev) => prev + 1);
|
|
175
174
|
}, [value]);
|
|
176
175
|
return valueRef;
|
|
177
176
|
}// 구현부
|
|
178
177
|
function useAutoUpdateRefState(state, callback) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
useFirstSkipEffect(
|
|
182
|
-
|
|
178
|
+
const valueRef = useRef(callback ? callback(state) : state);
|
|
179
|
+
const [_value, _setValue] = useState(() => (callback ? callback(state) : state));
|
|
180
|
+
useFirstSkipEffect(() => {
|
|
181
|
+
const newValue = callback ? callback(state) : state;
|
|
183
182
|
if (!equal(valueRef.current, newValue)) {
|
|
184
183
|
valueRef.current = newValue;
|
|
185
184
|
_setValue(newValue);
|
|
186
185
|
}
|
|
187
186
|
}, [state]);
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
const setValue = useCallback((newValue, skipCallback) => {
|
|
188
|
+
let finalNewValue = newValue;
|
|
190
189
|
if (typeof finalNewValue === 'function') {
|
|
191
|
-
_setValue(
|
|
190
|
+
_setValue((prev) => {
|
|
192
191
|
finalNewValue = finalNewValue(prev);
|
|
193
192
|
finalNewValue = !skipCallback && callback ? callback(finalNewValue) : finalNewValue;
|
|
194
193
|
return finalNewValue;
|
|
@@ -221,14 +220,14 @@ function equal(v1, v2) {
|
|
|
221
220
|
}
|
|
222
221
|
}// 구현부
|
|
223
222
|
function useAutoUpdateState(state, callback) {
|
|
224
|
-
|
|
225
|
-
useFirstSkipEffect(
|
|
223
|
+
const [_value, _setValue] = useState(() => (callback ? callback(state) : state));
|
|
224
|
+
useFirstSkipEffect(() => {
|
|
226
225
|
_setValue(callback ? callback(state) : state);
|
|
227
226
|
}, [state]);
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
const setValue = useCallback((newValue, skipCallback) => {
|
|
228
|
+
let finalNewValue = newValue;
|
|
230
229
|
if (typeof finalNewValue === 'function') {
|
|
231
|
-
_setValue(
|
|
230
|
+
_setValue((prev) => {
|
|
232
231
|
finalNewValue = finalNewValue(prev);
|
|
233
232
|
finalNewValue = !skipCallback && callback ? callback(finalNewValue) : finalNewValue;
|
|
234
233
|
return finalNewValue;
|
|
@@ -242,12 +241,12 @@ function useAutoUpdateState(state, callback) {
|
|
|
242
241
|
}, [callback]);
|
|
243
242
|
return [_value, setValue];
|
|
244
243
|
}function useRefState(initialState) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
244
|
+
const [_value, _setValue] = useState(initialState);
|
|
245
|
+
const valueRef = useRef(_value);
|
|
246
|
+
const setValue = useCallback((value) => {
|
|
248
247
|
if (typeof value === 'function') {
|
|
249
|
-
_setValue(
|
|
250
|
-
|
|
248
|
+
_setValue((prev) => {
|
|
249
|
+
const finalValue = value(prev);
|
|
251
250
|
valueRef.current = finalValue;
|
|
252
251
|
return finalValue;
|
|
253
252
|
});
|
|
@@ -259,8 +258,8 @@ function useAutoUpdateState(state, callback) {
|
|
|
259
258
|
}, []);
|
|
260
259
|
return [valueRef, _value, setValue];
|
|
261
260
|
}function useSafeUpdate() {
|
|
262
|
-
|
|
263
|
-
return useCallback(
|
|
261
|
+
const mountedRef = useMountedRef();
|
|
262
|
+
return useCallback((callback) => {
|
|
264
263
|
if (mountedRef.current) {
|
|
265
264
|
callback();
|
|
266
265
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';var react=require('react');function useFirstSkipEffect(effect, deps) {
|
|
2
|
-
|
|
3
|
-
react.useEffect(
|
|
2
|
+
const firstRef = react.useRef(true);
|
|
3
|
+
react.useEffect(() => {
|
|
4
4
|
if (firstRef.current) {
|
|
5
5
|
firstRef.current = false;
|
|
6
6
|
}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
11
11
|
}, deps);
|
|
12
12
|
}function useFirstSkipLayoutEffect(effect, deps) {
|
|
13
|
-
|
|
14
|
-
react.useLayoutEffect(
|
|
13
|
+
const firstRef = react.useRef(true);
|
|
14
|
+
react.useLayoutEffect(() => {
|
|
15
15
|
if (firstRef.current) {
|
|
16
16
|
firstRef.current = false;
|
|
17
17
|
}
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
22
22
|
}, deps);
|
|
23
23
|
}function useAutoForceUpdate(interval) {
|
|
24
|
-
|
|
25
|
-
react.useEffect(
|
|
26
|
-
|
|
27
|
-
setTick(
|
|
24
|
+
const [, setTick] = react.useState(0);
|
|
25
|
+
react.useEffect(() => {
|
|
26
|
+
const tm = setInterval(() => {
|
|
27
|
+
setTick((old) => {
|
|
28
28
|
return old + 1;
|
|
29
29
|
});
|
|
30
30
|
}, interval);
|
|
31
|
-
return
|
|
31
|
+
return () => {
|
|
32
32
|
clearInterval(tm);
|
|
33
33
|
};
|
|
34
34
|
}, [interval]);
|
|
@@ -43,45 +43,45 @@
|
|
|
43
43
|
ref.current = undefined;
|
|
44
44
|
}
|
|
45
45
|
}function useIntervalRef() {
|
|
46
|
-
|
|
47
|
-
react.useEffect(
|
|
48
|
-
return
|
|
46
|
+
const ref = react.useRef(undefined);
|
|
47
|
+
react.useEffect(() => {
|
|
48
|
+
return () => {
|
|
49
49
|
clearIntervalRef(ref);
|
|
50
50
|
};
|
|
51
51
|
}, []);
|
|
52
|
-
|
|
52
|
+
const setIntervalFunc = react.useCallback((callback, ms) => {
|
|
53
53
|
clearIntervalRef(ref);
|
|
54
|
-
ref.current = setInterval(
|
|
54
|
+
ref.current = setInterval(() => {
|
|
55
55
|
callback(ref);
|
|
56
56
|
}, ms);
|
|
57
57
|
}, []);
|
|
58
58
|
return [ref, setIntervalFunc];
|
|
59
59
|
}function useTimeoutRef() {
|
|
60
|
-
|
|
61
|
-
react.useEffect(
|
|
62
|
-
return
|
|
60
|
+
const ref = react.useRef(undefined);
|
|
61
|
+
react.useEffect(() => {
|
|
62
|
+
return () => {
|
|
63
63
|
clearTimeoutRef(ref);
|
|
64
64
|
};
|
|
65
65
|
}, []);
|
|
66
|
-
|
|
66
|
+
const setTimeoutFunc = react.useCallback((callback, ms) => {
|
|
67
67
|
clearTimeoutRef(ref);
|
|
68
|
-
ref.current = setTimeout(
|
|
68
|
+
ref.current = setTimeout(() => {
|
|
69
69
|
ref.current = undefined;
|
|
70
70
|
callback();
|
|
71
71
|
}, ms);
|
|
72
72
|
}, []);
|
|
73
73
|
return [ref, setTimeoutFunc];
|
|
74
74
|
}function useForceUpdate(delayMilliseconds) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return react.useCallback(
|
|
75
|
+
const [, setDelayTimeout] = useTimeoutRef();
|
|
76
|
+
const [, setValue] = react.useState(0);
|
|
77
|
+
return react.useCallback((delay) => {
|
|
78
78
|
if (ifUndefined(delay, delayMilliseconds) !== undefined) {
|
|
79
|
-
setDelayTimeout(
|
|
80
|
-
setValue(
|
|
79
|
+
setDelayTimeout(() => {
|
|
80
|
+
setValue((old) => old + 1);
|
|
81
81
|
}, ifUndefined(delay, delayMilliseconds));
|
|
82
82
|
}
|
|
83
83
|
else {
|
|
84
|
-
setValue(
|
|
84
|
+
setValue((old) => old + 1);
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
87
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
function ifUndefined(v, v2) {
|
|
94
94
|
return v === undefined ? v2 : v;
|
|
95
95
|
}function useForwardLayoutRef(ref, value, onSet, onUnset) {
|
|
96
|
-
react.useLayoutEffect(
|
|
96
|
+
react.useLayoutEffect(() => {
|
|
97
97
|
onSet === null || onSet === void 0 ? void 0 : onSet(value);
|
|
98
98
|
if (ref) {
|
|
99
99
|
if (typeof ref === 'function') {
|
|
@@ -103,7 +103,7 @@ function ifUndefined(v, v2) {
|
|
|
103
103
|
ref.current = value;
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
return
|
|
106
|
+
return () => {
|
|
107
107
|
onUnset === null || onUnset === void 0 ? void 0 : onUnset();
|
|
108
108
|
if (ref) {
|
|
109
109
|
if (typeof ref === 'function') {
|
|
@@ -116,7 +116,7 @@ function ifUndefined(v, v2) {
|
|
|
116
116
|
};
|
|
117
117
|
}, [onSet, onUnset, ref, value]);
|
|
118
118
|
}function useForwardRef(ref, value, onSet, onUnset) {
|
|
119
|
-
react.useEffect(
|
|
119
|
+
react.useEffect(() => {
|
|
120
120
|
onSet === null || onSet === void 0 ? void 0 : onSet(value);
|
|
121
121
|
if (ref) {
|
|
122
122
|
if (typeof ref === 'function') {
|
|
@@ -126,7 +126,7 @@ function ifUndefined(v, v2) {
|
|
|
126
126
|
ref.current = value;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
return
|
|
129
|
+
return () => {
|
|
130
130
|
onUnset === null || onUnset === void 0 ? void 0 : onUnset();
|
|
131
131
|
if (ref) {
|
|
132
132
|
if (typeof ref === 'function') {
|
|
@@ -138,57 +138,56 @@ function ifUndefined(v, v2) {
|
|
|
138
138
|
}
|
|
139
139
|
};
|
|
140
140
|
}, [onSet, onUnset, ref, value]);
|
|
141
|
-
}function useMountedRef(initialValue) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
react.useEffect(function () {
|
|
141
|
+
}function useMountedRef(initialValue = true) {
|
|
142
|
+
const isMountedRef = react.useRef(initialValue);
|
|
143
|
+
react.useEffect(() => {
|
|
145
144
|
isMountedRef.current = true;
|
|
146
|
-
return
|
|
145
|
+
return () => {
|
|
147
146
|
isMountedRef.current = false;
|
|
148
147
|
};
|
|
149
148
|
}, []);
|
|
150
149
|
return isMountedRef;
|
|
151
150
|
}function useLayoutPerformance(name) {
|
|
152
|
-
|
|
153
|
-
react.useLayoutEffect(
|
|
151
|
+
const beginTime = performance.now();
|
|
152
|
+
react.useLayoutEffect(() => {
|
|
154
153
|
console.log('Layout Performance', '-', name, performance.now() - beginTime);
|
|
155
154
|
});
|
|
156
155
|
}function usePerformance(name) {
|
|
157
|
-
|
|
158
|
-
react.useEffect(
|
|
156
|
+
const beginTime = performance.now();
|
|
157
|
+
react.useEffect(() => {
|
|
159
158
|
console.log('Performance', '-', name, performance.now() - beginTime);
|
|
160
159
|
});
|
|
161
160
|
}function useAutoUpdateLayoutRef(value) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
useFirstSkipLayoutEffect(
|
|
161
|
+
const valueRef = react.useRef(value);
|
|
162
|
+
const [, setUpdateValue] = react.useState(0);
|
|
163
|
+
useFirstSkipLayoutEffect(() => {
|
|
165
164
|
valueRef.current = value;
|
|
166
|
-
setUpdateValue(
|
|
165
|
+
setUpdateValue((prev) => prev + 1);
|
|
167
166
|
}, [value]);
|
|
168
167
|
return valueRef;
|
|
169
168
|
}function useAutoUpdateRef(value) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
useFirstSkipEffect(
|
|
169
|
+
const valueRef = react.useRef(value);
|
|
170
|
+
const [, setUpdateValue] = react.useState(0);
|
|
171
|
+
useFirstSkipEffect(() => {
|
|
173
172
|
valueRef.current = value;
|
|
174
|
-
setUpdateValue(
|
|
173
|
+
setUpdateValue((prev) => prev + 1);
|
|
175
174
|
}, [value]);
|
|
176
175
|
return valueRef;
|
|
177
176
|
}// 구현부
|
|
178
177
|
function useAutoUpdateRefState(state, callback) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
useFirstSkipEffect(
|
|
182
|
-
|
|
178
|
+
const valueRef = react.useRef(callback ? callback(state) : state);
|
|
179
|
+
const [_value, _setValue] = react.useState(() => (callback ? callback(state) : state));
|
|
180
|
+
useFirstSkipEffect(() => {
|
|
181
|
+
const newValue = callback ? callback(state) : state;
|
|
183
182
|
if (!equal(valueRef.current, newValue)) {
|
|
184
183
|
valueRef.current = newValue;
|
|
185
184
|
_setValue(newValue);
|
|
186
185
|
}
|
|
187
186
|
}, [state]);
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
const setValue = react.useCallback((newValue, skipCallback) => {
|
|
188
|
+
let finalNewValue = newValue;
|
|
190
189
|
if (typeof finalNewValue === 'function') {
|
|
191
|
-
_setValue(
|
|
190
|
+
_setValue((prev) => {
|
|
192
191
|
finalNewValue = finalNewValue(prev);
|
|
193
192
|
finalNewValue = !skipCallback && callback ? callback(finalNewValue) : finalNewValue;
|
|
194
193
|
return finalNewValue;
|
|
@@ -221,14 +220,14 @@ function equal(v1, v2) {
|
|
|
221
220
|
}
|
|
222
221
|
}// 구현부
|
|
223
222
|
function useAutoUpdateState(state, callback) {
|
|
224
|
-
|
|
225
|
-
useFirstSkipEffect(
|
|
223
|
+
const [_value, _setValue] = react.useState(() => (callback ? callback(state) : state));
|
|
224
|
+
useFirstSkipEffect(() => {
|
|
226
225
|
_setValue(callback ? callback(state) : state);
|
|
227
226
|
}, [state]);
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
const setValue = react.useCallback((newValue, skipCallback) => {
|
|
228
|
+
let finalNewValue = newValue;
|
|
230
229
|
if (typeof finalNewValue === 'function') {
|
|
231
|
-
_setValue(
|
|
230
|
+
_setValue((prev) => {
|
|
232
231
|
finalNewValue = finalNewValue(prev);
|
|
233
232
|
finalNewValue = !skipCallback && callback ? callback(finalNewValue) : finalNewValue;
|
|
234
233
|
return finalNewValue;
|
|
@@ -242,12 +241,12 @@ function useAutoUpdateState(state, callback) {
|
|
|
242
241
|
}, [callback]);
|
|
243
242
|
return [_value, setValue];
|
|
244
243
|
}function useRefState(initialState) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
244
|
+
const [_value, _setValue] = react.useState(initialState);
|
|
245
|
+
const valueRef = react.useRef(_value);
|
|
246
|
+
const setValue = react.useCallback((value) => {
|
|
248
247
|
if (typeof value === 'function') {
|
|
249
|
-
_setValue(
|
|
250
|
-
|
|
248
|
+
_setValue((prev) => {
|
|
249
|
+
const finalValue = value(prev);
|
|
251
250
|
valueRef.current = finalValue;
|
|
252
251
|
return finalValue;
|
|
253
252
|
});
|
|
@@ -259,8 +258,8 @@ function useAutoUpdateState(state, callback) {
|
|
|
259
258
|
}, []);
|
|
260
259
|
return [valueRef, _value, setValue];
|
|
261
260
|
}function useSafeUpdate() {
|
|
262
|
-
|
|
263
|
-
return react.useCallback(
|
|
261
|
+
const mountedRef = useMountedRef();
|
|
262
|
+
return react.useCallback((callback) => {
|
|
264
263
|
if (mountedRef.current) {
|
|
265
264
|
callback();
|
|
266
265
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pdg/react-hook",
|
|
3
3
|
"title": "React Hook",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.40",
|
|
5
5
|
"description": "React Hook",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@eslint/js": "^9.28.0",
|
|
50
|
-
"@pdg/types": "^1.0.
|
|
50
|
+
"@pdg/types": "^1.0.8",
|
|
51
51
|
"@rollup/plugin-commonjs": "^28.0.3",
|
|
52
52
|
"@rollup/plugin-eslint": "^9.0.5",
|
|
53
53
|
"@rollup/plugin-node-resolve": "^16.0.1",
|