整个form表单——以登陆为例,这是整个登陆组件
效果如图:
1.表单点击提交后,会触发onFinish函数,在这个函数里将会获取到前端输入的数据,新版本validateFields的返回值是promise,在官网有提到,但是没有实际的完整例子。
this.formRef.current.validateFields().then((value)=>{...}).catch(err=>{...})
2.表单的验证,比如对输入的要求:长度、组成等,可以在Form.item标签的rules属性直接写规则,
3.表单的验证,也可以通过getFieldValue('XXX'):XXX和Form.Item的name相对应
rules={[
({ getFieldValue }) => ({
validator(_, value) {
if (!value || getFieldValue('password') === value) {
return Promise.resolve();
}
console.log(getFieldValue('password'),value)
return Promise.reject(new Error('两次密码不匹配'));
},
}),
]}
export default class Login extends Component {
// 得到强大的form实体、有验证、有获取数据等等
formRef = React.createRef();
onFinish = (event) => {
console.log(this.formRef.current.validateFields())
//验证方法三,也是页面拿到数据后的处理操作,也可以进行检验,新版本返回的是promise
this.formRef.current.validateFields().then(value => {
// 验证通过后进入
console.log(value);
}).catch(err => { // 验证不通过时进入
console.log(err);
});
console.log('Received values of form: ', event)
}
render() {
return (
<div className='login'>
<header className='login-header'>
<img src={logo} alt="图标加载失败" />
<h1>React 后台管理系统</h1>
</header>
<section className='login-content'>
<h2>用户登录</h2>
{/* antd组件 */}
<Form ref={this.formRef}
name="normal_login"
className="login-form"
initialValues={{
remember: true,
}}
onFinish={this.onFinish}
>
{/* 用户名字 校验规则rules */}
<Form.Item
name="username"
rules={[
{
type:'string',
required: true,
message: '请输入用户名!',
pattern:/\w+/,
whitespace:true,
max:12,
min:4
},
]}
>
<Input prefix={<UserOutlined className="site-form-item-icon" />} placeholder="Username" />
</Form.Item>
{/* 用户密码 */}
<Form.Item
name="password"
rules={[
{
type:'string',
required: true,
message: '请输入密码!',
pattern:/\w+/,
whitespace:true,
max:12,
min:4
},
]}
>
<Input prefix={<LockOutlined className="site-form-item-icon" />} placeholder="Password" />
</Form.Item>
{/* 用户密码确认 */}
<Form.Item
name="Confirmpassword"
rules={[
({ getFieldValue }) => ({
validator(_, value) {
if (!value || getFieldValue('password') === value) {
return Promise.resolve();
}
console.log(getFieldValue('password'),value)
return Promise.reject(new Error('两次密码不匹配'));
},
}),
]}
>
<Input
prefix={<LockOutlined className="site-form-item-icon" />}
type="password"
placeholder="请再次输入Password"
/>
</Form.Item>
<Form.Item>
<Form.Item name="remember" valuePropName="checked" noStyle>
<Checkbox>Remember me</Checkbox>
</Form.Item>
{/* <a className="login-form-forgot" href="">
Forgot password
</a> */}
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit" className="login-form-button">
Log in
</Button>
{/* Or <a href="">register now!</a> */}
</Form.Item>
</Form>
</section>
</div>
)
}
}