reactjs - 如何知道 Ant-Design 表单中的所有字段何时被验证(添加值)?
问题描述
我有一个简单Form
的方法来检查用户的输入值,例如姓名、电子邮件和地址并验证它们。到目前为止,我已经成功实现了这一点。但是我有一个提交button
作为最后一个提交Form.Item
,我只想在所有输入字段都填写并验证后启用。
我应该如何检查这一点并随后设置formCompleted
切换禁用按钮的状态?
解决方案
检查此示例https://ant.design/components/form/#components-form-demo-horizontal-login。
function hasErrors(fieldsError) {
return Object.keys(fieldsError).some(field => fieldsError[field]);
}
class HorizontalLoginForm extends React.Component {
componentDidMount() {
// To disabled submit button at the beginning.
this.props.form.validateFields();
}
handleSubmit = e => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
}
});
};
render() {
const { getFieldDecorator, getFieldsError, getFieldError, isFieldTouched } = this.props.form;
// Only show error after a field is touched.
const usernameError = isFieldTouched('username') && getFieldError('username');
return (
<Form layout="inline" onSubmit={this.handleSubmit}>
<Form.Item validateStatus={usernameError ? 'error' : ''} help={usernameError || ''}>
{getFieldDecorator('username', {
rules: [{ required: true, message: 'Please input your username!' }],
})(
<Input placeholder="Username" />,
)}
</Form.Item>
<Form.Item>
<Button htmlType="submit" disabled={hasErrors(getFieldsError())}>
Log in
</Button>
</Form.Item>
</Form>
);
}
}
该示例检查是否getFieldsError
有任何值来确定按钮是否应该被禁用。当表单首次安装时,它用于validateFields
验证您的输入和更新getFieldsError
。这样做的问题是,错误会在任何输入发生之前显示出来,这就是为什么它会在使用isFieldTouched
.
希望有帮助!
推荐阅读
- c# - 从 Asp.net Web 应用程序执行 Windows 服务 (*.exe)
- android - 通过 Android Studio 运行单元测试第一次工作然后失败
- java - android SensorEventListener 没有写它应该写的东西
- tsql - SSRS 分组摘要 - Max 不工作
- python-3.x - Facebook 删除对话回调
- uwp - UWP 应用程序仅在 Loopback 豁免和 fiddler 同时运行时连接到 Sharepoint
- python - 处理一个类的多个对象
- jenkins - 将 Gitlab 环境变量传递给 Jenkins multijob
- azure - Azure Active Directory 令牌 URL 路径?
- android - 如何在本地将应用程序密钥存储在单独的文件中并从 build.gradle 中加载?