field-form
field-form copied to clipboard
官方用法, onFinish永远不会被调用
demo地址https://field-form.react-component.vercel.app/demo/validate
导致bug代码段
context => ({
validator(_, __, callback) {
if (context.isFieldTouched('password2')) {
context.validateFields(['password2']);
callback();
return;
}
callback();
},
}),
onFinishFailed会被调用
@fallenleavesguy 前些天遇到了类似问题,原因是 node_modules/rc-field-form/es/useForm.js中
783 var summaryPromise = allPromiseFinish(promiseList);
784 _this.lastValidatePromise = summaryPromise; // Notify fields with rule that validate has finished and need update
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^调用validateFields这里会被覆盖,导致下文出现outOfDate: true的异常。
785
786 summaryPromise.catch(function (results) {
787 return results;
788 }).then(function (results) {
789 var resultNamePathList = results.map(function (_ref6) {
790 var name = _ref6.name;
791 return name;
792 });
793
794 _this.notifyObservers(_this.store, resultNamePathList, {
795 type: 'validateFinish'
796 });
797
798 _this.triggerOnFieldsChange(resultNamePathList, results);
799 });
800 var returnPromise = summaryPromise.then(function () {
801 if (_this.lastValidatePromise === summaryPromise) {
802 return Promise.resolve(_this.getFieldsValue(namePathList));
803 }
804
805 return Promise.reject([]);
806 }).catch(function (results) {
807 var errorList = results.filter(function (result) {
808 return result && result.errors.length;
809 });
810 return Promise.reject({
811 values: _this.getFieldsValue(namePathList),
812 errorFields: errorList,
813 outOfDate: _this.lastValidatePromise !== summaryPromise
814 });
815 }); // Do not throw in console
建议使用 setTimeout(()=>context.validateFields(['password2'])); 来避免同时交叉进行两个Promise。