@rc-component/util 1.2.2 → 1.3.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/hooks/useControlledState.d.ts +8 -0
- package/es/hooks/useControlledState.js +21 -0
- package/es/hooks/useMergedState.d.ts +1 -0
- package/es/hooks/useMergedState.js +1 -0
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/lib/hooks/useControlledState.d.ts +8 -0
- package/lib/hooks/useControlledState.js +28 -0
- package/lib/hooks/useMergedState.d.ts +1 -0
- package/lib/hooks/useMergedState.js +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +7 -0
- package/package.json +2 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type Updater<T> = (updater: T | ((origin: T) => T)) => void;
|
|
2
|
+
/**
|
|
3
|
+
* Similar to `useState` but will use props value if provided.
|
|
4
|
+
* From React 18, we do not need safe `useState` since it will not throw for unmounted update.
|
|
5
|
+
* This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.
|
|
6
|
+
*/
|
|
7
|
+
export default function useControlledState<T>(defaultStateValue: T | (() => T), value?: T): [T, Updater<T>];
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import useLayoutEffect from "./useLayoutEffect";
|
|
3
|
+
/**
|
|
4
|
+
* Similar to `useState` but will use props value if provided.
|
|
5
|
+
* From React 18, we do not need safe `useState` since it will not throw for unmounted update.
|
|
6
|
+
* This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.
|
|
7
|
+
*/
|
|
8
|
+
export default function useControlledState(defaultStateValue, value) {
|
|
9
|
+
const [innerValue, setInnerValue] = useState(defaultStateValue);
|
|
10
|
+
const mergedValue = value !== undefined ? value : innerValue;
|
|
11
|
+
useLayoutEffect(mount => {
|
|
12
|
+
if (!mount) {
|
|
13
|
+
setInnerValue(value);
|
|
14
|
+
}
|
|
15
|
+
}, [value]);
|
|
16
|
+
return [
|
|
17
|
+
// Value
|
|
18
|
+
mergedValue,
|
|
19
|
+
// Update function
|
|
20
|
+
setInnerValue];
|
|
21
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
type Updater<T> = (updater: T | ((origin: T) => T), ignoreDestroy?: boolean) => void;
|
|
2
2
|
/**
|
|
3
|
+
* @deprecated Please use `useControlledState` instead if not need support < React 18.
|
|
3
4
|
* Similar to `useState` but will use props value if provided.
|
|
4
5
|
* Note that internal use rc-util `useState` hook.
|
|
5
6
|
*/
|
package/es/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { default as useEvent } from './hooks/useEvent';
|
|
2
2
|
export { default as useMergedState } from './hooks/useMergedState';
|
|
3
|
+
export { default as useControlledState } from './hooks/useControlledState';
|
|
3
4
|
export { supportNodeRef, supportRef, useComposeRef } from './ref';
|
|
4
5
|
export { default as get } from './utils/get';
|
|
5
6
|
export { default as set, merge } from './utils/set';
|
package/es/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { default as useEvent } from "./hooks/useEvent";
|
|
2
2
|
export { default as useMergedState } from "./hooks/useMergedState";
|
|
3
|
+
export { default as useControlledState } from "./hooks/useControlledState";
|
|
3
4
|
export { supportNodeRef, supportRef, useComposeRef } from "./ref";
|
|
4
5
|
export { default as get } from "./utils/get";
|
|
5
6
|
export { default as set, merge } from "./utils/set";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type Updater<T> = (updater: T | ((origin: T) => T)) => void;
|
|
2
|
+
/**
|
|
3
|
+
* Similar to `useState` but will use props value if provided.
|
|
4
|
+
* From React 18, we do not need safe `useState` since it will not throw for unmounted update.
|
|
5
|
+
* This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.
|
|
6
|
+
*/
|
|
7
|
+
export default function useControlledState<T>(defaultStateValue: T | (() => T), value?: T): [T, Updater<T>];
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useControlledState;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _useLayoutEffect = _interopRequireDefault(require("./useLayoutEffect"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
/**
|
|
11
|
+
* Similar to `useState` but will use props value if provided.
|
|
12
|
+
* From React 18, we do not need safe `useState` since it will not throw for unmounted update.
|
|
13
|
+
* This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.
|
|
14
|
+
*/
|
|
15
|
+
function useControlledState(defaultStateValue, value) {
|
|
16
|
+
const [innerValue, setInnerValue] = (0, _react.useState)(defaultStateValue);
|
|
17
|
+
const mergedValue = value !== undefined ? value : innerValue;
|
|
18
|
+
(0, _useLayoutEffect.default)(mount => {
|
|
19
|
+
if (!mount) {
|
|
20
|
+
setInnerValue(value);
|
|
21
|
+
}
|
|
22
|
+
}, [value]);
|
|
23
|
+
return [
|
|
24
|
+
// Value
|
|
25
|
+
mergedValue,
|
|
26
|
+
// Update function
|
|
27
|
+
setInnerValue];
|
|
28
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
type Updater<T> = (updater: T | ((origin: T) => T), ignoreDestroy?: boolean) => void;
|
|
2
2
|
/**
|
|
3
|
+
* @deprecated Please use `useControlledState` instead if not need support < React 18.
|
|
3
4
|
* Similar to `useState` but will use props value if provided.
|
|
4
5
|
* Note that internal use rc-util `useState` hook.
|
|
5
6
|
*/
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { default as useEvent } from './hooks/useEvent';
|
|
2
2
|
export { default as useMergedState } from './hooks/useMergedState';
|
|
3
|
+
export { default as useControlledState } from './hooks/useControlledState';
|
|
3
4
|
export { supportNodeRef, supportRef, useComposeRef } from './ref';
|
|
4
5
|
export { default as get } from './utils/get';
|
|
5
6
|
export { default as set, merge } from './utils/set';
|
package/lib/index.js
CHANGED
|
@@ -57,6 +57,12 @@ Object.defineProperty(exports, "useComposeRef", {
|
|
|
57
57
|
return _ref.useComposeRef;
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
|
+
Object.defineProperty(exports, "useControlledState", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _useControlledState.default;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
60
66
|
Object.defineProperty(exports, "useEvent", {
|
|
61
67
|
enumerable: true,
|
|
62
68
|
get: function () {
|
|
@@ -77,6 +83,7 @@ Object.defineProperty(exports, "warning", {
|
|
|
77
83
|
});
|
|
78
84
|
var _useEvent = _interopRequireDefault(require("./hooks/useEvent"));
|
|
79
85
|
var _useMergedState = _interopRequireDefault(require("./hooks/useMergedState"));
|
|
86
|
+
var _useControlledState = _interopRequireDefault(require("./hooks/useControlledState"));
|
|
80
87
|
var _ref = require("./ref");
|
|
81
88
|
var _get = _interopRequireDefault(require("./utils/get"));
|
|
82
89
|
var _set = _interopRequireWildcard(require("./utils/set"));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rc-component/util",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Common Utils For React Component",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"coverage": "npm test -- --coverage",
|
|
28
28
|
"lint": "eslint src/ --ext .tsx,.ts & eslint tests/ --ext .tsx,.ts",
|
|
29
29
|
"prepare": "husky install",
|
|
30
|
+
"prepublishOnly": "npm run compile && rc-np",
|
|
30
31
|
"start": "dumi dev",
|
|
31
32
|
"test": "rc-test"
|
|
32
33
|
},
|