form icon indicating copy to clipboard operation
form copied to clipboard

validateFields 的 Promise 形式支持返回值包含 errors 和 values

Open xiaoxiangmoe opened this issue 7 years ago • 4 comments

不希望通过 catch 拿到 errors,因为 ts 无法约束 throw 出来的值的类型,ts 的 Promise 也只有一个泛型参数,对应着 resolve 的值。

https://github.com/react-component/form/blob/9b580f661dcebdb7b50cfac67ff11a1a256f4286/src/createBaseForm.js#L537-L545

希望采取下面的写法

 callback = (errors, values) => { 
   if (oldCb) { 
     oldCb(errors, values); 
   } else if (errors) { 
     resolve({ errors, values }); 
   } else { 
     resolve({ values }); 
   } 
 }; 

这样子就可以约束类型了。

xiaoxiangmoe avatar Mar 14 '19 10:03 xiaoxiangmoe

有道理,不过是个 breaking change

yesmeck avatar Mar 14 '19 11:03 yesmeck

@yesmeck 目前在 antd 那边还没有说明 validateFields 返回值是 Promise,我觉得我们可以考虑一下添加一个接口 asyncValidateFields 或者 validateFieldsAsync,引导大家使用新的接口。

Promise 的 reject 对我们来说,当作 throw 使用比较常见,也就是 reject 的一般是 Error 的 instance,这里的用法不太符合惯常习惯。

xiaoxiangmoe avatar Mar 14 '19 11:03 xiaoxiangmoe

antd 应该还没有正式暴露,是不是可以修改完然后 antd 文档里新增这种用法,可以关闭掉 https://github.com/ant-design/ant-design/issues/5590

afc163 avatar Mar 14 '19 14:03 afc163

@afc163 因为我们组的同学还不太会使用 hooks,所以我准备提供一版 form 的 hooks 的文档,把 https://ant.design/components/form/ 里的 demo 使用 https://github.com/mushan0x0/rc-form-hooks 重写。

rc-form-hooks 的接口保持和这里一致。如果这边有计划修改,我就先去把 rc-form-hooks 的实现先改了。

xiaoxiangmoe avatar Mar 14 '19 14:03 xiaoxiangmoe