由于 Antd 4 中去除了 Form.create 方法创建 Form 实例得到 getFieldDecorator 、validateFields 等方法,我们使用类组件想要 Form 上的方法就需要用到 Ref 来获得实例。
import React, { Component } from 'react' import { Form, Input, Button } from 'antd' class Example extends Component { // 通过 Ref 来获取 Form 实例 // 同样的,你可以不使用createRef()方法而用this.refs.XXX也可以 formRef = React.createRef() // 通过 Form 的 Submit监听 得到字段值 onFinish = values => { console.log(values) } getValues= () => { // 得到 Form 实例 const form = this.formRef.current // 使用 getFieldsValue 获取多个字段值 const values = form.getFieldsValue(['name','age']) console.log(values) } getValidateValues= async () => { const form = this.formRef.current // 使用 validateFields 获取验证后字段值 try { const values = await form.validateFields(['name','age']) console.log(values) } catch (err) { console.log(err) } } render() { const { Item } = Form return ( <Form ref={this.formRef} onFinish={this.onFinish}> <Item name='name' label='姓名' rules={[{required:true,message:'请输入姓名'}]}> <Input /> </Item> <Item name='age' label='年龄'> <Input /> </Item> <Item> <Button type='primary' htmlType='submit'>提交</Button> <Button type='link' onClick={this.getValues}>非 Submit 方式(不验证)</Button> <Button type='link' onClick={this.getValidateValues}>非 Submit 方式(验证)</Button> </Item> </Form> ) } } export default Example上诉就是 Antd 4 中怎么在类组件中获得表单组件的值,主要就是去除了 Form.create 后的一些变化。
通过 Ref 获得实例后得到 getFieldValue 获取单个字段值、getFieldsValue 获取多个字段值、validateFields 获取验证后字段值等,使用这些方法主动去得到表单的值。
Form 组件的 onFinish 属性绑定的方法,在触发表单提交的操作时会进行调用,并传入字段的值作为参数。这个方法会对表单的 rules 规则进行验证。
Form 实例的 getFieldValue 和 getFieldsValue 方法获取表单的字段值时不会对 rules 规则进行验证。需要主动获取表单字段值并进行 rules 验证就需要用到 validateFields 方法,它的返回值时一个 Promise 对象。
攻城狮Lee丶 认证博客专家 小区编程大赛银奖 幼儿园网络顾问 植发门店终身会员 一个奇葩的程序员,外冷内热,有点闷骚 ,生活状态下是个逗比,工作时是个完美主义者。....................