extra-react-hooks 0.8.10 → 0.8.11
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/lib/use-number-input.js
CHANGED
|
@@ -27,15 +27,15 @@ export function useNumberInput({ value, lazy, onChange }) {
|
|
|
27
27
|
if (e.target.checkValidity()) {
|
|
28
28
|
const newValue = e.target.valueAsNumber;
|
|
29
29
|
if (isntNaN(newValue) && newValue !== value) {
|
|
30
|
-
setDisplayValue(newValue.toString());
|
|
30
|
+
setDisplayValue(newValue.toString(), true);
|
|
31
31
|
onChange(newValue, true);
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
|
-
setDisplayValue(value.toString());
|
|
34
|
+
setDisplayValue(value.toString(), true);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
|
-
setDisplayValue(value.toString());
|
|
38
|
+
setDisplayValue(value.toString(), true);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
};
|
|
@@ -50,8 +50,8 @@ function useDerivedState(dep) {
|
|
|
50
50
|
}, [dep]);
|
|
51
51
|
return [
|
|
52
52
|
stateRef.current,
|
|
53
|
-
newState => {
|
|
54
|
-
if (stateRef.current !== newState) {
|
|
53
|
+
(newState, force = false) => {
|
|
54
|
+
if (force || stateRef.current !== newState) {
|
|
55
55
|
stateRef.current = newState;
|
|
56
56
|
forceUpdate();
|
|
57
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-number-input.js","sourceRoot":"","sources":["../src/use-number-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAKrD;IASC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,eAAe,CAAS,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEjF,OAAO;QACL,aAAa;YACX,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"use-number-input.js","sourceRoot":"","sources":["../src/use-number-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAKrD;IASC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,eAAe,CAAS,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEjF,OAAO;QACL,aAAa;YACX,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,YAAY;gBAGnB,QAAQ,CAAC,CAAC;oBACR,IAAI,IAAI,EAAE,CAAC;wBACT,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAA;wBAEzB,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBACjC,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;4BAC9B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAA;4BAEvC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gCAC5C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;4BAC3B,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,CAAC;oBACN,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC;wBAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAA;wBAEvC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;4BAC5C,eAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;4BAE1C,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;wBAC1B,CAAC;6BAAM,CAAC;4BACN,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;wBACzC,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;oBACzC,CAAC;gBACH,CAAC;aACF,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAI,GAAM;IAIhC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAI,GAAG,CAAC,CAAA;IAE/B,OAAO,CAAC,GAAG,EAAE;QACX,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAA;IACxB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAET,OAAO;QACL,QAAQ,CAAC,OAAO;QAChB,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;YAC1B,IAAI,KAAK,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3C,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAA;gBAE3B,WAAW,EAAE,CAAA;YACf,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
package/src/use-number-input.ts
CHANGED
|
@@ -24,6 +24,8 @@ export function useNumberInput({ value, lazy, onChange }: {
|
|
|
24
24
|
return {
|
|
25
25
|
type: 'number'
|
|
26
26
|
, value: displayValue
|
|
27
|
+
// `input[type='number']`有一些特异行为:
|
|
28
|
+
// 如果只是在数字后面输入点`.`, 不会触发change事件.
|
|
27
29
|
, onChange(e) {
|
|
28
30
|
if (lazy) {
|
|
29
31
|
e.target.reportValidity()
|
|
@@ -44,14 +46,14 @@ export function useNumberInput({ value, lazy, onChange }: {
|
|
|
44
46
|
const newValue = e.target.valueAsNumber
|
|
45
47
|
|
|
46
48
|
if (isntNaN(newValue) && newValue !== value) {
|
|
47
|
-
setDisplayValue(newValue.toString())
|
|
49
|
+
setDisplayValue(newValue.toString(), true)
|
|
48
50
|
|
|
49
51
|
onChange(newValue, true)
|
|
50
52
|
} else {
|
|
51
|
-
setDisplayValue(value.toString())
|
|
53
|
+
setDisplayValue(value.toString(), true)
|
|
52
54
|
}
|
|
53
55
|
} else {
|
|
54
|
-
setDisplayValue(value.toString())
|
|
56
|
+
setDisplayValue(value.toString(), true)
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
59
|
}
|
|
@@ -59,7 +61,10 @@ export function useNumberInput({ value, lazy, onChange }: {
|
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
|
|
62
|
-
function useDerivedState<T>(dep: T): [
|
|
64
|
+
function useDerivedState<T>(dep: T): [
|
|
65
|
+
state: T
|
|
66
|
+
, setState: (newState: T, force?: boolean) => void
|
|
67
|
+
] {
|
|
63
68
|
const forceUpdate = useForceUpdate()
|
|
64
69
|
const stateRef = useRef<T>(dep)
|
|
65
70
|
|
|
@@ -69,8 +74,8 @@ function useDerivedState<T>(dep: T): [state: T, setState: (newState: T) => void]
|
|
|
69
74
|
|
|
70
75
|
return [
|
|
71
76
|
stateRef.current
|
|
72
|
-
, newState => {
|
|
73
|
-
if (stateRef.current !== newState) {
|
|
77
|
+
, (newState, force = false) => {
|
|
78
|
+
if (force || stateRef.current !== newState) {
|
|
74
79
|
stateRef.current = newState
|
|
75
80
|
|
|
76
81
|
forceUpdate()
|