@sheinx/hooks 3.10.3-beta.1 → 3.10.3-beta.3
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/cjs/components/use-form/flow-guard.d.ts +12 -0
- package/cjs/components/use-form/flow-guard.d.ts.map +1 -0
- package/cjs/components/use-form/flow-guard.js +46 -0
- package/cjs/components/use-form/use-form.d.ts.map +1 -1
- package/cjs/components/use-form/use-form.js +17 -5
- package/cjs/components/use-form/use-form.type.d.ts +7 -0
- package/cjs/components/use-form/use-form.type.d.ts.map +1 -1
- package/cjs/components/use-table/use-table-columns.d.ts +4 -0
- package/cjs/components/use-table/use-table-columns.d.ts.map +1 -1
- package/cjs/components/use-table/use-table-columns.js +18 -0
- package/esm/components/use-form/flow-guard.d.ts +12 -0
- package/esm/components/use-form/flow-guard.d.ts.map +1 -0
- package/esm/components/use-form/flow-guard.js +40 -0
- package/esm/components/use-form/use-form.d.ts.map +1 -1
- package/esm/components/use-form/use-form.js +17 -5
- package/esm/components/use-form/use-form.type.d.ts +7 -0
- package/esm/components/use-form/use-form.type.d.ts.map +1 -1
- package/esm/components/use-table/use-table-columns.d.ts +4 -0
- package/esm/components/use-table/use-table-columns.d.ts.map +1 -1
- package/esm/components/use-table/use-table-columns.js +18 -0
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 为 Form.Flow 的更新函数加一层守卫:只有 Flow 关心的值发生变化时才触发更新。
|
|
3
|
+
*
|
|
4
|
+
* 依赖数据按 immutable 方式更新(结构共享):值没变引用就不变,因此可以用引用比较判断。
|
|
5
|
+
* - 不带 names(globalKey):对表单根对象做浅比较
|
|
6
|
+
* - 带 names:逐个比较对应路径的值
|
|
7
|
+
*
|
|
8
|
+
* 守卫以 updateFn 为 key 缓存,Flow 因 names 引用变化而重复 watch 时快照不丢失。
|
|
9
|
+
* 首次通知没有快照,一律放行(Flow 渲染到挂载 watch 之间值可能已变化)。
|
|
10
|
+
*/
|
|
11
|
+
export declare const createFlowGuard: (getFormValue: () => any, globalKey: string) => (names: string[], updateFn: () => void) => () => void;
|
|
12
|
+
//# sourceMappingURL=flow-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-guard.d.ts","sourceRoot":"","sources":["flow-guard.ts"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,iBAAkB,MAAM,GAAG,aAAa,MAAM,aAGzD,MAAM,EAAE,YAAY,MAAM,IAAI,WAhBnC,IA0CX,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createFlowGuard = void 0;
|
|
7
|
+
var _object = require("../../utils/object");
|
|
8
|
+
var _shallowEqual = require("../../utils/shallow-equal");
|
|
9
|
+
/**
|
|
10
|
+
* 为 Form.Flow 的更新函数加一层守卫:只有 Flow 关心的值发生变化时才触发更新。
|
|
11
|
+
*
|
|
12
|
+
* 依赖数据按 immutable 方式更新(结构共享):值没变引用就不变,因此可以用引用比较判断。
|
|
13
|
+
* - 不带 names(globalKey):对表单根对象做浅比较
|
|
14
|
+
* - 带 names:逐个比较对应路径的值
|
|
15
|
+
*
|
|
16
|
+
* 守卫以 updateFn 为 key 缓存,Flow 因 names 引用变化而重复 watch 时快照不丢失。
|
|
17
|
+
* 首次通知没有快照,一律放行(Flow 渲染到挂载 watch 之间值可能已变化)。
|
|
18
|
+
*/
|
|
19
|
+
var createFlowGuard = exports.createFlowGuard = function createFlowGuard(getFormValue, globalKey) {
|
|
20
|
+
var guards = new WeakMap();
|
|
21
|
+
return function (names, updateFn) {
|
|
22
|
+
var guard = guards.get(updateFn);
|
|
23
|
+
if (!guard) {
|
|
24
|
+
var g = {
|
|
25
|
+
names: names,
|
|
26
|
+
snapshot: undefined,
|
|
27
|
+
fn: function fn() {
|
|
28
|
+
var formValue = getFormValue();
|
|
29
|
+
var next = g.names.map(function (n) {
|
|
30
|
+
return n === globalKey ? formValue : (0, _object.deepGet)(formValue, n);
|
|
31
|
+
});
|
|
32
|
+
var prev = g.snapshot;
|
|
33
|
+
var same = !!prev && prev.length === next.length && next.every(function (v, i) {
|
|
34
|
+
return g.names[i] === globalKey ? (0, _shallowEqual.shallowEqual)(prev[i], v) : prev[i] === v;
|
|
35
|
+
});
|
|
36
|
+
g.snapshot = next;
|
|
37
|
+
if (!same) updateFn();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
guard = g;
|
|
41
|
+
guards.set(updateFn, g);
|
|
42
|
+
}
|
|
43
|
+
guard.names = names;
|
|
44
|
+
return guard.fn;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["use-form.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["use-form.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAgCtE,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAGhB,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI5D,QAAA,MAAM,OAAO;;;;;;;;;wBAwVC;gBAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAAC,WAAW,CAAC,EAAE,OAAO,CAAA;aAAE;8BApSnB,MAAM;oCAqXD,OAAO,aAAoB,MAAM,IAAI;;6BAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;oCAdrB,MAAM,EAAE;sCAhVxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;qCAgZvB,MAAM,WAAW,gBAAgB;gCA7CzB,MAAM,SAAS,MAAM,UAAU,KAAK;gCAKpC,MAAM,SAAS,MAAM;kCA3JpD,MAAM,0BAAyB,qBAAqB;;;;;;;;oBA+EjD;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;0BApSnB,MAAM;gCAqXD,OAAO,aAAoB,MAAM,IAAI;;yBAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;gCAdrB,MAAM,EAAE;kCAhVxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;iCAgZvB,MAAM,WAAW,gBAAgB;4BA7CzB,MAAM,SAAS,MAAM,UAAU,KAAK;4BAKpC,MAAM,SAAS,MAAM;8BA3JpD,MAAM,0BAAyB,qBAAqB;;;CAkc9D,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -13,6 +13,7 @@ var _attribute = require("../../utils/attribute");
|
|
|
13
13
|
var _flat = require("../../utils/flat");
|
|
14
14
|
var _useDefaultValue = require("../../common/use-default-value");
|
|
15
15
|
var _formSchemaBuilder = require("./use-form-schema/form-schema-builder");
|
|
16
|
+
var _flowGuard = require("./flow-guard");
|
|
16
17
|
var _immer = require("../../utils/immer");
|
|
17
18
|
var _utils = require("../../utils");
|
|
18
19
|
var _validate = require("../../utils/validate");
|
|
@@ -57,7 +58,9 @@ var useForm = function useForm(props) {
|
|
|
57
58
|
scrollParent = props.scrollParent,
|
|
58
59
|
isControl = props.isControl,
|
|
59
60
|
_props$validateTrigge = props.validateTrigger,
|
|
60
|
-
validateTrigger = _props$validateTrigge === void 0 ? 'change' : _props$validateTrigge
|
|
61
|
+
validateTrigger = _props$validateTrigge === void 0 ? 'change' : _props$validateTrigge,
|
|
62
|
+
_props$deepClone = props.deepClone,
|
|
63
|
+
shouldDeepClone = _props$deepClone === void 0 ? true : _props$deepClone;
|
|
61
64
|
var deepSetOptions = {
|
|
62
65
|
removeUndefined: removeUndefined,
|
|
63
66
|
forceSet: true
|
|
@@ -73,7 +76,8 @@ var useForm = function useForm(props) {
|
|
|
73
76
|
removeArr: new Set(),
|
|
74
77
|
names: new Set(),
|
|
75
78
|
submitLock: false,
|
|
76
|
-
|
|
79
|
+
// deepClone 为 false 时跳过全量深拷贝,与外部 value 共享引用(依赖 immer 不可变更新)
|
|
80
|
+
value: (shouldDeepClone ? (0, _utils.deepClone)(props.value) : props.value) || emptyObj,
|
|
77
81
|
errors: {},
|
|
78
82
|
serverErrors: {},
|
|
79
83
|
lastValue: props.value || emptyObj,
|
|
@@ -208,6 +212,13 @@ var useForm = function useForm(props) {
|
|
|
208
212
|
}
|
|
209
213
|
});
|
|
210
214
|
});
|
|
215
|
+
|
|
216
|
+
// deepClone 为 false 时,Flow 仅在其关心的值变化时才更新(见 flow-guard.ts)
|
|
217
|
+
var getFlowGuard = React.useMemo(function () {
|
|
218
|
+
return (0, _flowGuard.createFlowGuard)(function () {
|
|
219
|
+
return context.value;
|
|
220
|
+
}, globalKey);
|
|
221
|
+
}, []);
|
|
211
222
|
var update = function update(name) {
|
|
212
223
|
var _context$flowMap$glob;
|
|
213
224
|
if (!name) {
|
|
@@ -616,9 +627,10 @@ var useForm = function useForm(props) {
|
|
|
616
627
|
watch: function watch() {
|
|
617
628
|
var names = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [globalKey];
|
|
618
629
|
var updateFn = arguments.length > 1 ? arguments[1] : undefined;
|
|
630
|
+
var fn = shouldDeepClone ? updateFn : getFlowGuard(names, updateFn);
|
|
619
631
|
names.forEach(function (name) {
|
|
620
632
|
context.flowMap[name] = context.flowMap[name] || new Set();
|
|
621
|
-
context.flowMap[name].add(
|
|
633
|
+
context.flowMap[name].add(fn);
|
|
622
634
|
});
|
|
623
635
|
},
|
|
624
636
|
unWatch: function unWatch() {
|
|
@@ -626,7 +638,7 @@ var useForm = function useForm(props) {
|
|
|
626
638
|
var updateFn = arguments.length > 1 ? arguments[1] : undefined;
|
|
627
639
|
names.forEach(function (name) {
|
|
628
640
|
if (updateFn) {
|
|
629
|
-
context.flowMap[name].delete(updateFn);
|
|
641
|
+
context.flowMap[name].delete(shouldDeepClone ? updateFn : getFlowGuard(names, updateFn));
|
|
630
642
|
} else {
|
|
631
643
|
delete context.flowMap[name];
|
|
632
644
|
}
|
|
@@ -673,7 +685,7 @@ var useForm = function useForm(props) {
|
|
|
673
685
|
}, [labelWidth, labelAlign, labelVerticalAlign, keepErrorHeight, inline, disabled, size, formName, colon, validateTrigger]);
|
|
674
686
|
var updateValue = function updateValue() {
|
|
675
687
|
if (props.value !== context.lastValue && props.value !== context.value) {
|
|
676
|
-
context.value = (0, _utils.deepClone)(props.value) || emptyObj;
|
|
688
|
+
context.value = (shouldDeepClone ? (0, _utils.deepClone)(props.value) : props.value) || emptyObj;
|
|
677
689
|
}
|
|
678
690
|
context.lastValue = props.value;
|
|
679
691
|
};
|
|
@@ -211,6 +211,13 @@ export interface BaseFormProps<T> extends Omit<FormCommonConfig, 'formName'> {
|
|
|
211
211
|
* @version 3.5.3
|
|
212
212
|
*/
|
|
213
213
|
name?: string;
|
|
214
|
+
/**
|
|
215
|
+
* @en Whether to deep clone the value passed in from outside. When set to false, the form will no longer deep clone the value on initialization and when the controlled value changes, which significantly improves performance for large form data. Note: when disabled, the form shares nested object references with the value passed in, please follow the immutable update principle (e.g. onChange={v => setValue({ ...v, user: { ...v.user, name: 'x' } })}) and do not directly mutate nested objects. Directly mutating nested fields of the outer value will affect the form data (e.g. getValue) synchronously, but will not trigger rendering, so the fields still display the old value until the top-level reference changes (e.g. setValue({ ...value }))
|
|
216
|
+
* @cn 是否对外部传入的 value 进行深拷贝。设置为 false 时,表单在初始化及受控 value 变化时不再深拷贝,表单数据量较大时可显著提升性能。注意:关闭后表单内部会与传入的 value 共享嵌套对象引用,请遵循不可变更新原则(如 onChange={v => setValue({ ...v, user: { ...v.user, name: 'x' } })}),不要直接修改嵌套对象。直接修改外部 value 的嵌套字段会同步影响表单内部数据(如 getValue),但不会触发渲染,字段仍显示旧值,直到顶层引用变化(如 setValue({ ...value }))
|
|
217
|
+
* @default true
|
|
218
|
+
* @version 3.10.3
|
|
219
|
+
*/
|
|
220
|
+
deepClone?: boolean;
|
|
214
221
|
}
|
|
215
222
|
export type UseFormProps<T> = BaseFormProps<T> & {
|
|
216
223
|
formElRef: React.RefObject<HTMLFormElement>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-form.type.d.ts","sourceRoot":"","sources":["use-form.type.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-form.type.d.ts","sourceRoot":"","sources":["use-form.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,10 @@ export interface UseColumnsProps<Data> {
|
|
|
6
6
|
showCheckbox?: boolean;
|
|
7
7
|
virtualColumn?: boolean | VirtualColumnConfig;
|
|
8
8
|
scrollRef: React.RefObject<HTMLElement>;
|
|
9
|
+
/**
|
|
10
|
+
* columns 引用变化但逐列浅比较都相等时,复用上一次的格式化结果(行级 memo 的前置条件)
|
|
11
|
+
*/
|
|
12
|
+
reuseEqualColumns?: boolean;
|
|
9
13
|
}
|
|
10
14
|
export type RxpandHideColType = {
|
|
11
15
|
hide?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-columns.d.ts","sourceRoot":"","sources":["use-table-columns.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,KAA+C,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"use-table-columns.d.ts","sourceRoot":"","sources":["use-table-columns.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,KAA+C,MAAM,OAAO,CAAC;AAGpE,MAAM,WAAW,eAAe,CAAC,IAAI;IACnC,OAAO,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAC9C,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAgBD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAC3E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,GAAG,IAAI,CAAC;AAKT,QAAA,MAAM,UAAU;;;;wBAiGkC,MAAM;;;;;CA2GvD,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -7,6 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
var _immer = require("../../utils/immer");
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _usePersistFn = _interopRequireDefault(require("../../common/use-persist-fn"));
|
|
10
|
+
var _shallowEqual = _interopRequireDefault(require("../../utils/shallow-equal"));
|
|
10
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
13
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -20,6 +21,12 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
20
21
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
21
22
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
22
23
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
24
|
+
// 逐列浅比较:业务常见写法 columns.map(c => ({ ...c })) 每次都会产生新对象,但内容(含 render 引用)不变
|
|
25
|
+
var isColumnsShallowEqual = function isColumnsShallowEqual(a, b) {
|
|
26
|
+
return a.length === b.length && a.every(function (c, i) {
|
|
27
|
+
return (0, _shallowEqual.default)(c, b[i]);
|
|
28
|
+
});
|
|
29
|
+
};
|
|
23
30
|
var getHideExpandCol = function getHideExpandCol() {
|
|
24
31
|
var cols = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
25
32
|
var expandCol = cols.find(function (col) {
|
|
@@ -55,6 +62,8 @@ var useColumns = function useColumns(props) {
|
|
|
55
62
|
var _useRef = (0, _react.useRef)({
|
|
56
63
|
cachedColumns: null,
|
|
57
64
|
oldColumns: null,
|
|
65
|
+
oldShowCheckbox: undefined,
|
|
66
|
+
columnsSnapshot: null,
|
|
58
67
|
groupLevel: 0,
|
|
59
68
|
expandHideCol: null
|
|
60
69
|
}),
|
|
@@ -66,6 +75,11 @@ var useColumns = function useColumns(props) {
|
|
|
66
75
|
if (columnsA === context.oldColumns) {
|
|
67
76
|
return context.cachedColumns;
|
|
68
77
|
}
|
|
78
|
+
if (props.reuseEqualColumns && context.columnsSnapshot && context.cachedColumns && context.oldShowCheckbox === props.showCheckbox && isColumnsShallowEqual(columnsA, context.columnsSnapshot)) {
|
|
79
|
+
context.oldColumns = columnsA;
|
|
80
|
+
return context.cachedColumns;
|
|
81
|
+
}
|
|
82
|
+
context.oldShowCheckbox = props.showCheckbox;
|
|
69
83
|
context.expandHideCol = getHideExpandCol(columnsA);
|
|
70
84
|
var columns = columnsA.filter(function (c) {
|
|
71
85
|
return _typeof(c) === 'object';
|
|
@@ -101,6 +115,10 @@ var useColumns = function useColumns(props) {
|
|
|
101
115
|
});
|
|
102
116
|
});
|
|
103
117
|
context.oldColumns = columnsA;
|
|
118
|
+
// 与快照比较而非与旧数组比较:列对象被原地修改时旧数组里也是同一个对象,比较不出差异
|
|
119
|
+
context.columnsSnapshot = props.reuseEqualColumns ? columnsA.map(function (c) {
|
|
120
|
+
return c && _typeof(c) === 'object' ? _objectSpread({}, c) : c;
|
|
121
|
+
}) : null;
|
|
104
122
|
return context.cachedColumns;
|
|
105
123
|
});
|
|
106
124
|
var columns = getColumns(propsColumns) || [];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 为 Form.Flow 的更新函数加一层守卫:只有 Flow 关心的值发生变化时才触发更新。
|
|
3
|
+
*
|
|
4
|
+
* 依赖数据按 immutable 方式更新(结构共享):值没变引用就不变,因此可以用引用比较判断。
|
|
5
|
+
* - 不带 names(globalKey):对表单根对象做浅比较
|
|
6
|
+
* - 带 names:逐个比较对应路径的值
|
|
7
|
+
*
|
|
8
|
+
* 守卫以 updateFn 为 key 缓存,Flow 因 names 引用变化而重复 watch 时快照不丢失。
|
|
9
|
+
* 首次通知没有快照,一律放行(Flow 渲染到挂载 watch 之间值可能已变化)。
|
|
10
|
+
*/
|
|
11
|
+
export declare const createFlowGuard: (getFormValue: () => any, globalKey: string) => (names: string[], updateFn: () => void) => () => void;
|
|
12
|
+
//# sourceMappingURL=flow-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-guard.d.ts","sourceRoot":"","sources":["flow-guard.ts"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,iBAAkB,MAAM,GAAG,aAAa,MAAM,aAGzD,MAAM,EAAE,YAAY,MAAM,IAAI,WAhBnC,IA0CX,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { deepGet } from "../../utils/object";
|
|
2
|
+
import { shallowEqual } from "../../utils/shallow-equal";
|
|
3
|
+
/**
|
|
4
|
+
* 为 Form.Flow 的更新函数加一层守卫:只有 Flow 关心的值发生变化时才触发更新。
|
|
5
|
+
*
|
|
6
|
+
* 依赖数据按 immutable 方式更新(结构共享):值没变引用就不变,因此可以用引用比较判断。
|
|
7
|
+
* - 不带 names(globalKey):对表单根对象做浅比较
|
|
8
|
+
* - 带 names:逐个比较对应路径的值
|
|
9
|
+
*
|
|
10
|
+
* 守卫以 updateFn 为 key 缓存,Flow 因 names 引用变化而重复 watch 时快照不丢失。
|
|
11
|
+
* 首次通知没有快照,一律放行(Flow 渲染到挂载 watch 之间值可能已变化)。
|
|
12
|
+
*/
|
|
13
|
+
export var createFlowGuard = function createFlowGuard(getFormValue, globalKey) {
|
|
14
|
+
var guards = new WeakMap();
|
|
15
|
+
return function (names, updateFn) {
|
|
16
|
+
var guard = guards.get(updateFn);
|
|
17
|
+
if (!guard) {
|
|
18
|
+
var g = {
|
|
19
|
+
names: names,
|
|
20
|
+
snapshot: undefined,
|
|
21
|
+
fn: function fn() {
|
|
22
|
+
var formValue = getFormValue();
|
|
23
|
+
var next = g.names.map(function (n) {
|
|
24
|
+
return n === globalKey ? formValue : deepGet(formValue, n);
|
|
25
|
+
});
|
|
26
|
+
var prev = g.snapshot;
|
|
27
|
+
var same = !!prev && prev.length === next.length && next.every(function (v, i) {
|
|
28
|
+
return g.names[i] === globalKey ? shallowEqual(prev[i], v) : prev[i] === v;
|
|
29
|
+
});
|
|
30
|
+
g.snapshot = next;
|
|
31
|
+
if (!same) updateFn();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
guard = g;
|
|
35
|
+
guards.set(updateFn, g);
|
|
36
|
+
}
|
|
37
|
+
guard.names = names;
|
|
38
|
+
return guard.fn;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["use-form.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["use-form.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAgCtE,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAGhB,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI5D,QAAA,MAAM,OAAO;;;;;;;;;wBAwVC;gBAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAAC,WAAW,CAAC,EAAE,OAAO,CAAA;aAAE;8BApSnB,MAAM;oCAqXD,OAAO,aAAoB,MAAM,IAAI;;6BAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;oCAdrB,MAAM,EAAE;sCAhVxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;qCAgZvB,MAAM,WAAW,gBAAgB;gCA7CzB,MAAM,SAAS,MAAM,UAAU,KAAK;gCAKpC,MAAM,SAAS,MAAM;kCA3JpD,MAAM,0BAAyB,qBAAqB;;;;;;;;oBA+EjD;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;0BApSnB,MAAM;gCAqXD,OAAO,aAAoB,MAAM,IAAI;;yBAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;gCAdrB,MAAM,EAAE;kCAhVxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;iCAgZvB,MAAM,WAAW,gBAAgB;4BA7CzB,MAAM,SAAS,MAAM,UAAU,KAAK;4BAKpC,MAAM,SAAS,MAAM;8BA3JpD,MAAM,0BAAyB,qBAAqB;;;CAkc9D,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -18,6 +18,7 @@ import { getDataAttributeName } from "../../utils/attribute";
|
|
|
18
18
|
import { insertValue, spliceValue } from "../../utils/flat";
|
|
19
19
|
import { usePrevious } from "../../common/use-default-value";
|
|
20
20
|
import { SchemaBuilder } from "./use-form-schema/form-schema-builder";
|
|
21
|
+
import { createFlowGuard } from "./flow-guard";
|
|
21
22
|
var globalKey = '__global__&&@@';
|
|
22
23
|
var SUBMIT_TIMEOUT = 10;
|
|
23
24
|
var RESET_TIMEOUT = 500;
|
|
@@ -48,7 +49,9 @@ var useForm = function useForm(props) {
|
|
|
48
49
|
scrollParent = props.scrollParent,
|
|
49
50
|
isControl = props.isControl,
|
|
50
51
|
_props$validateTrigge = props.validateTrigger,
|
|
51
|
-
validateTrigger = _props$validateTrigge === void 0 ? 'change' : _props$validateTrigge
|
|
52
|
+
validateTrigger = _props$validateTrigge === void 0 ? 'change' : _props$validateTrigge,
|
|
53
|
+
_props$deepClone = props.deepClone,
|
|
54
|
+
shouldDeepClone = _props$deepClone === void 0 ? true : _props$deepClone;
|
|
52
55
|
var deepSetOptions = {
|
|
53
56
|
removeUndefined: removeUndefined,
|
|
54
57
|
forceSet: true
|
|
@@ -64,7 +67,8 @@ var useForm = function useForm(props) {
|
|
|
64
67
|
removeArr: new Set(),
|
|
65
68
|
names: new Set(),
|
|
66
69
|
submitLock: false,
|
|
67
|
-
|
|
70
|
+
// deepClone 为 false 时跳过全量深拷贝,与外部 value 共享引用(依赖 immer 不可变更新)
|
|
71
|
+
value: (shouldDeepClone ? deepClone(props.value) : props.value) || emptyObj,
|
|
68
72
|
errors: {},
|
|
69
73
|
serverErrors: {},
|
|
70
74
|
lastValue: props.value || emptyObj,
|
|
@@ -199,6 +203,13 @@ var useForm = function useForm(props) {
|
|
|
199
203
|
}
|
|
200
204
|
});
|
|
201
205
|
});
|
|
206
|
+
|
|
207
|
+
// deepClone 为 false 时,Flow 仅在其关心的值变化时才更新(见 flow-guard.ts)
|
|
208
|
+
var getFlowGuard = React.useMemo(function () {
|
|
209
|
+
return createFlowGuard(function () {
|
|
210
|
+
return context.value;
|
|
211
|
+
}, globalKey);
|
|
212
|
+
}, []);
|
|
202
213
|
var update = function update(name) {
|
|
203
214
|
var _context$flowMap$glob;
|
|
204
215
|
if (!name) {
|
|
@@ -607,9 +618,10 @@ var useForm = function useForm(props) {
|
|
|
607
618
|
watch: function watch() {
|
|
608
619
|
var names = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [globalKey];
|
|
609
620
|
var updateFn = arguments.length > 1 ? arguments[1] : undefined;
|
|
621
|
+
var fn = shouldDeepClone ? updateFn : getFlowGuard(names, updateFn);
|
|
610
622
|
names.forEach(function (name) {
|
|
611
623
|
context.flowMap[name] = context.flowMap[name] || new Set();
|
|
612
|
-
context.flowMap[name].add(
|
|
624
|
+
context.flowMap[name].add(fn);
|
|
613
625
|
});
|
|
614
626
|
},
|
|
615
627
|
unWatch: function unWatch() {
|
|
@@ -617,7 +629,7 @@ var useForm = function useForm(props) {
|
|
|
617
629
|
var updateFn = arguments.length > 1 ? arguments[1] : undefined;
|
|
618
630
|
names.forEach(function (name) {
|
|
619
631
|
if (updateFn) {
|
|
620
|
-
context.flowMap[name].delete(updateFn);
|
|
632
|
+
context.flowMap[name].delete(shouldDeepClone ? updateFn : getFlowGuard(names, updateFn));
|
|
621
633
|
} else {
|
|
622
634
|
delete context.flowMap[name];
|
|
623
635
|
}
|
|
@@ -664,7 +676,7 @@ var useForm = function useForm(props) {
|
|
|
664
676
|
}, [labelWidth, labelAlign, labelVerticalAlign, keepErrorHeight, inline, disabled, size, formName, colon, validateTrigger]);
|
|
665
677
|
var updateValue = function updateValue() {
|
|
666
678
|
if (props.value !== context.lastValue && props.value !== context.value) {
|
|
667
|
-
context.value = deepClone(props.value) || emptyObj;
|
|
679
|
+
context.value = (shouldDeepClone ? deepClone(props.value) : props.value) || emptyObj;
|
|
668
680
|
}
|
|
669
681
|
context.lastValue = props.value;
|
|
670
682
|
};
|
|
@@ -211,6 +211,13 @@ export interface BaseFormProps<T> extends Omit<FormCommonConfig, 'formName'> {
|
|
|
211
211
|
* @version 3.5.3
|
|
212
212
|
*/
|
|
213
213
|
name?: string;
|
|
214
|
+
/**
|
|
215
|
+
* @en Whether to deep clone the value passed in from outside. When set to false, the form will no longer deep clone the value on initialization and when the controlled value changes, which significantly improves performance for large form data. Note: when disabled, the form shares nested object references with the value passed in, please follow the immutable update principle (e.g. onChange={v => setValue({ ...v, user: { ...v.user, name: 'x' } })}) and do not directly mutate nested objects. Directly mutating nested fields of the outer value will affect the form data (e.g. getValue) synchronously, but will not trigger rendering, so the fields still display the old value until the top-level reference changes (e.g. setValue({ ...value }))
|
|
216
|
+
* @cn 是否对外部传入的 value 进行深拷贝。设置为 false 时,表单在初始化及受控 value 变化时不再深拷贝,表单数据量较大时可显著提升性能。注意:关闭后表单内部会与传入的 value 共享嵌套对象引用,请遵循不可变更新原则(如 onChange={v => setValue({ ...v, user: { ...v.user, name: 'x' } })}),不要直接修改嵌套对象。直接修改外部 value 的嵌套字段会同步影响表单内部数据(如 getValue),但不会触发渲染,字段仍显示旧值,直到顶层引用变化(如 setValue({ ...value }))
|
|
217
|
+
* @default true
|
|
218
|
+
* @version 3.10.3
|
|
219
|
+
*/
|
|
220
|
+
deepClone?: boolean;
|
|
214
221
|
}
|
|
215
222
|
export type UseFormProps<T> = BaseFormProps<T> & {
|
|
216
223
|
formElRef: React.RefObject<HTMLFormElement>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-form.type.d.ts","sourceRoot":"","sources":["use-form.type.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-form.type.d.ts","sourceRoot":"","sources":["use-form.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,10 @@ export interface UseColumnsProps<Data> {
|
|
|
6
6
|
showCheckbox?: boolean;
|
|
7
7
|
virtualColumn?: boolean | VirtualColumnConfig;
|
|
8
8
|
scrollRef: React.RefObject<HTMLElement>;
|
|
9
|
+
/**
|
|
10
|
+
* columns 引用变化但逐列浅比较都相等时,复用上一次的格式化结果(行级 memo 的前置条件)
|
|
11
|
+
*/
|
|
12
|
+
reuseEqualColumns?: boolean;
|
|
9
13
|
}
|
|
10
14
|
export type RxpandHideColType = {
|
|
11
15
|
hide?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-columns.d.ts","sourceRoot":"","sources":["use-table-columns.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,KAA+C,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"use-table-columns.d.ts","sourceRoot":"","sources":["use-table-columns.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,KAA+C,MAAM,OAAO,CAAC;AAGpE,MAAM,WAAW,eAAe,CAAC,IAAI;IACnC,OAAO,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAC9C,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAgBD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAC3E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,GAAG,IAAI,CAAC;AAKT,QAAA,MAAM,UAAU;;;;wBAiGkC,MAAM;;;;;CA2GvD,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -13,6 +13,13 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
13
13
|
import { produce } from "../../utils/immer";
|
|
14
14
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
15
15
|
import usePersistFn from "../../common/use-persist-fn";
|
|
16
|
+
import shallowEqual from "../../utils/shallow-equal";
|
|
17
|
+
// 逐列浅比较:业务常见写法 columns.map(c => ({ ...c })) 每次都会产生新对象,但内容(含 render 引用)不变
|
|
18
|
+
var isColumnsShallowEqual = function isColumnsShallowEqual(a, b) {
|
|
19
|
+
return a.length === b.length && a.every(function (c, i) {
|
|
20
|
+
return shallowEqual(c, b[i]);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
16
23
|
var getHideExpandCol = function getHideExpandCol() {
|
|
17
24
|
var cols = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
18
25
|
var expandCol = cols.find(function (col) {
|
|
@@ -48,6 +55,8 @@ var useColumns = function useColumns(props) {
|
|
|
48
55
|
var _useRef = useRef({
|
|
49
56
|
cachedColumns: null,
|
|
50
57
|
oldColumns: null,
|
|
58
|
+
oldShowCheckbox: undefined,
|
|
59
|
+
columnsSnapshot: null,
|
|
51
60
|
groupLevel: 0,
|
|
52
61
|
expandHideCol: null
|
|
53
62
|
}),
|
|
@@ -59,6 +68,11 @@ var useColumns = function useColumns(props) {
|
|
|
59
68
|
if (columnsA === context.oldColumns) {
|
|
60
69
|
return context.cachedColumns;
|
|
61
70
|
}
|
|
71
|
+
if (props.reuseEqualColumns && context.columnsSnapshot && context.cachedColumns && context.oldShowCheckbox === props.showCheckbox && isColumnsShallowEqual(columnsA, context.columnsSnapshot)) {
|
|
72
|
+
context.oldColumns = columnsA;
|
|
73
|
+
return context.cachedColumns;
|
|
74
|
+
}
|
|
75
|
+
context.oldShowCheckbox = props.showCheckbox;
|
|
62
76
|
context.expandHideCol = getHideExpandCol(columnsA);
|
|
63
77
|
var columns = columnsA.filter(function (c) {
|
|
64
78
|
return _typeof(c) === 'object';
|
|
@@ -94,6 +108,10 @@ var useColumns = function useColumns(props) {
|
|
|
94
108
|
});
|
|
95
109
|
});
|
|
96
110
|
context.oldColumns = columnsA;
|
|
111
|
+
// 与快照比较而非与旧数组比较:列对象被原地修改时旧数组里也是同一个对象,比较不出差异
|
|
112
|
+
context.columnsSnapshot = props.reuseEqualColumns ? columnsA.map(function (c) {
|
|
113
|
+
return c && _typeof(c) === 'object' ? _objectSpread({}, c) : c;
|
|
114
|
+
}) : null;
|
|
97
115
|
return context.cachedColumns;
|
|
98
116
|
});
|
|
99
117
|
var columns = getColumns(propsColumns) || [];
|