antd 原有的 Form 组件其实已经足够好用了,但是这次 4.0 对 Form 的更新开始注重不止要好用,还要“优雅”。“优雅”这个东西一直都很玄学。
antd 的 Form 一直以来都很特例独行,区别于其它 antd 组件,Form 的调用并不只是简单的引入组件即可,而是先要进行 Form.create()创建一个 Form 实例,使用 FormItem 时还需在 jsx 中调用 form.getFieldDecorator 方法,写法较为复杂,况且在 jsx 中插入大量的非节点代码,造成代码结构复杂,且一般情况下,一个 Form 表单会有多个 FormItem,也就意味着我们需要重复的去调用 form.getFieldDecorator 方法,导致后期维护成本很高。写这种重复且简单的无意义的代码,这和开篇所说的“优雅”背道而驰。
为了解决这些问题,这次 antd 团队从底层重写了 Form。首先,去掉了 Form.create()这一步操作,改为直接在组件内部去完成。另外将原来的 FormItem 的调用方式也进行了优化,下面是老版本的 FormItem 的调用示例:
<FormItem {
...formItemLayout} label="姓名">
{
form.getFieldDecorator("name", {
rules: [