Skip to content

Commit 28de43e

Browse files
committed
文档更新
1 parent 5504516 commit 28de43e

File tree

14 files changed

+123
-91
lines changed

14 files changed

+123
-91
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ type ValidateTriggerType = "change" | "blur" | "none";
2424

2525
type Validator = (
2626
value: any,
27-
formValue: {}
27+
formValue: {},
28+
triggerType: ValidateTriggerType
2829
) => boolean | string | Error | Promise;
2930

3031
type InvalidError = {

esm/Form.js

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ function (_React$Component) {
278278
this.fields.filter(function (field) {
279279
return field.props.name === name;
280280
}).forEach(function (field) {
281+
var disableValidator = field.getProp("disableValidator");
282+
if (disableValidator) return;
281283
var fieldProps = field.props;
282284

283285
if (fieldProps.required) {
@@ -400,26 +402,26 @@ function (_React$Component) {
400402
formError = _this$state.formError,
401403
validatingFields = _this$state.validatingFields;
402404
this.fieldLocks[name] = this.fieldLocks[name] || 1;
403-
var lockId = ++this.fieldLocks[name]; //是否异步探测
405+
var lockId = ++this.fieldLocks[name]; //是否异步检测
404406

405407
var asyncTimer = setTimeout(function () {
406-
var _extends4;
408+
var _extends4, _extends5;
407409

408410
asyncTimer = null;
409411
if (lockId !== _this2.fieldLocks[name]) return;
410412

411413
_this2.setState({
412-
validatingFields: _extends({}, validatingFields, (_extends4 = {}, _extends4[name] = true, _extends4))
414+
validatingFields: _extends({}, validatingFields, (_extends4 = {}, _extends4[name] = true, _extends4)),
415+
formError: _extends({}, formError, (_extends5 = {}, _extends5[name] = null, _extends5))
413416
});
414-
}, asyncTestDelay); // let isAsync = true;
417+
}, asyncTestDelay);
415418

416419
this._validateField(name, function (errors, value) {
417-
var _extends5, _extends6;
420+
var _extends6, _extends7;
418421

419422
if (asyncTimer) {
420423
clearTimeout(asyncTimer);
421-
} // isAsync = false;
422-
424+
}
423425

424426
if (lockId !== _this2.fieldLocks[name]) {
425427
callback(errors, value, true
@@ -429,8 +431,8 @@ function (_React$Component) {
429431
}
430432

431433
_this2.setState({
432-
formError: _extends({}, formError, (_extends5 = {}, _extends5[name] = errors ? errors[0].message : null, _extends5)),
433-
validatingFields: _extends({}, validatingFields, (_extends6 = {}, _extends6[name] = false, _extends6))
434+
formError: _extends({}, formError, (_extends6 = {}, _extends6[name] = errors ? errors[0].message : null, _extends6)),
435+
validatingFields: _extends({}, validatingFields, (_extends7 = {}, _extends7[name] = false, _extends7))
434436
}, function () {
435437
callback(errors, value);
436438
});
@@ -441,10 +443,11 @@ function (_React$Component) {
441443
var _this3 = this;
442444

443445
callback = typeof callback === "function" ? callback : noop;
446+
var formError = {};
447+
var asyncUpdateTimer = null;
448+
var hasRunComplete = false;
444449
var asyncTestDelay = this.props.asyncTestDelay;
445-
var _this$state2 = this.state,
446-
formValue = _this$state2.formValue,
447-
formError = _this$state2.formError;
450+
var formValue = this.state.formValue;
448451
this.fieldLocks = {}; //validate优先级高于validateField
449452

450453
var lockId = ++this.formLockId;
@@ -471,16 +474,20 @@ function (_React$Component) {
471474
}
472475

473476
if (validCounter <= 0) {
477+
hasRunComplete = true;
478+
479+
if (asyncUpdateTimer) {
480+
clearTimeout(asyncUpdateTimer);
481+
asyncUpdateTimer = null;
482+
}
483+
474484
if (lockId !== _this3.formLockId) {
475485
callback(allErrors.length ? allErrors : null, formValue, true
476486
/* abort state */
477487
);
478-
console.log("abort");
479488
return;
480489
}
481490

482-
console.log("validate");
483-
484491
_this3.setState({
485492
formError: formError,
486493
validatingFields: {}
@@ -491,17 +498,13 @@ function (_React$Component) {
491498
};
492499

493500
if (fields.length) {
494-
//包含多个异步校验的情况下只执行一次
495-
var hasUpdate = false; //校验初始化
496-
501+
//校验初始化
497502
fields.forEach(function (field) {
498503
var name = field.props.name;
499504
validCounter++;
500-
validatingFields[name] = true;
501-
502-
if (!(name in formError)) {
503-
formError[name] = null;
504-
}
505+
validatingFields[name] = true; // if (!(name in formError)) {
506+
// formError[name] = null;
507+
// }
505508
}); //开始进行字段校验
506509

507510
fields.forEach(function (field) {
@@ -511,9 +514,6 @@ function (_React$Component) {
511514
var asyncTimer = setTimeout(function () {
512515
isAsyncValidate = true;
513516
asyncTimer = null;
514-
if (hasUpdate) return;
515-
hasUpdate = true;
516-
updateFormState();
517517
}, asyncTestDelay);
518518

519519
_this3._validateField(name, function (errors) {
@@ -531,7 +531,14 @@ function (_React$Component) {
531531

532532
complete(errors, name);
533533
}, triggerType);
534-
});
534+
}); //如果校验方法中存在异步校验则先显示同步校验的信息及异步状态
535+
536+
asyncUpdateTimer = setTimeout(function () {
537+
asyncUpdateTimer = null; //如果不存在异步校验,hasRunComplete会为true
538+
539+
if (hasRunComplete) return;
540+
updateFormState();
541+
}, asyncTestDelay);
535542
} else {
536543
callback(null, formValue);
537544
}
@@ -599,6 +606,7 @@ Form.propTypes = process.env.NODE_ENV !== "production" ? {
599606
getDefaultFieldValue: PropTypes.func,
600607
renderControlExtra: PropTypes.func,
601608
formValue: PropTypes.object,
609+
disableValidator: PropTypes.func,
602610
validators: PropTypes.object,
603611
validateDelay: PropTypes.number,
604612
validateTrigger: PropTypes.oneOfType([PropTypes.oneOf(["blur", "change", "none"]), PropTypes.array]),
@@ -623,10 +631,12 @@ Form.defaultProps = {
623631
prefixCls: "nex-form",
624632
className: "",
625633
style: {},
634+
//实验性质,有序可能移除
635+
disableValidator: false,
626636
validators: {},
627637
path2obj: true,
628638
component: "form",
629-
asyncTestDelay: 100,
639+
asyncTestDelay: 16,
630640
validateDelay: 0,
631641
validateTrigger: ["change"],
632642
//"blur",

esm/FormItem.js

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import PropTypes from "prop-types";
88
import classnames from "classnames";
99
import FormContext from "./FormContext";
1010
import FormItemContext from "./FormItemContext";
11+
var fid = 1;
1112

1213
var FormItem =
1314
/*#__PURE__*/
@@ -30,13 +31,6 @@ function (_React$Component) {
3031
_defineProperty(_assertThisInitialized(_this), "_validateTimer", null);
3132

3233
_defineProperty(_assertThisInitialized(_this), "handleChange", function (value, callback) {
33-
var oldValue = _this.getValue(); //是否有必要检测?
34-
35-
36-
if (value === oldValue) {
37-
return;
38-
}
39-
4034
_this.setValue(value, function (formValue) {
4135
callback && callback();
4236

@@ -66,8 +60,10 @@ function (_React$Component) {
6660
}
6761
});
6862

69-
var form = _this.getForm();
63+
var form = _this.getForm(); //组件id
64+
7065

66+
_this._fid = fid++;
7167
form.addField(_assertThisInitialized(_this));
7268
return _this;
7369
}
@@ -244,14 +240,14 @@ function (_React$Component) {
244240
_proto.getFormProp = function getFormProp(prop, defaultValue) {
245241
var form = this.getForm();
246242
var formProps = form.props;
247-
return formProps[prop] || defaultValue;
243+
return prop in formProps ? formProps[prop] : defaultValue;
248244
};
249245

250246
_proto.getProp = function getProp(prop, defaultValue) {
251247
var form = this.getForm();
252248
var formProps = form.props;
253249
var props = this.props;
254-
return prop in props ? props[prop] : formProps[prop] || defaultValue;
250+
return prop in props ? props[prop] : prop in formProps ? formProps[prop] : defaultValue;
255251
};
256252

257253
_proto.getFormItemContext = function getFormItemContext() {
@@ -274,7 +270,9 @@ function (_React$Component) {
274270
prefixCls = _this$props2.prefixCls,
275271
style = _this$props2.style,
276272
renderExtra = _this$props2.renderExtra,
277-
children = _this$props2.children;
273+
children = _this$props2.children; //实验性质,有序可能移除
274+
275+
var disableValidator = this.getProp("disableValidator");
278276
var inline = this.getProp("inline");
279277
var labelPosition = this.getProp("labelPosition");
280278
var labelAlign = this.getProp("labelAlign");
@@ -301,7 +299,7 @@ function (_React$Component) {
301299
}, React.createElement("div", {
302300
style: style,
303301
ref: this.saveDOM,
304-
className: classnames(prefixCls, (_classnames = {}, _classnames[prefixCls + "-inline"] = inline, _classnames[prefixCls + "-" + labelPosition] = labelPosition, _classnames["has-error"] = hasError, _classnames["is-validating"] = isValidating, _classnames["is-required"] = required || showRequiredMark, _classnames["" + className] = className, _classnames))
302+
className: classnames(prefixCls, (_classnames = {}, _classnames[prefixCls + "-inline"] = inline, _classnames[prefixCls + "-" + labelPosition] = labelPosition, _classnames["has-error"] = hasError, _classnames["is-validating"] = isValidating, _classnames["is-required"] = (required || showRequiredMark) && !disableValidator, _classnames["" + className] = className, _classnames))
305303
}, label && React.createElement("label", {
306304
htmlFor: this.getProp("labelFor"),
307305
className: classnames((_classnames2 = {}, _classnames2[prefixCls + "-label"] = true, _classnames2[prefixCls + "-label-left"] = labelAlign === "left" && labelPosition === "left", _classnames2), this.getProp("labelClassName")),

esm/index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ declare namespace ReactWidgetForm {
55

66
type Validator = (
77
value: any,
8-
formValue: {}
8+
formValue: {},
9+
triggerType: ValidateTriggerType
910
) => boolean | string | Error | Promise;
1011

1112
interface FormProps {

esm/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import FormContext from "./FormContext";
66
import FormItemContext from "./FormItemContext";
77
import useForm from "./useForm";
88
import useFormItem from "./useFormItem";
9-
export { Form, FormItem, NativeInput, FormContext, FormItemContext, useForm, useFormItem };
9+
export { Form, FormItem, NativeInput, NativeInput as NativeField, FormContext, FormItemContext, useForm, useFormItem };
1010
Form.Item = FormItem;
1111
Form.NativeInput = NativeInput;
12+
Form.NativeField = NativeInput;
1213
Form.Context = FormContext;
1314
Form.ItemContext = FormItemContext;
1415
export default Form;

0 commit comments

Comments
 (0)