Ant Design Form表单

内联登录栏,常用在顶部导航栏中。

在这里插入图片描述

](https://img-blog.csdnimg.cn/500d1f5537ff4fd690b4d7565f4089d1.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3F1aXR2,size_16,color_FFFFFF,t_70)

import React from 'react';
import ReactDOM from 'react-dom';
import 'antd/dist/antd.css';
import './index.css';
import { Form, Icon, Input, Button } from 'antd';
function hasErrors(fieldsError) {//getFieldsError()  
    return Object.keys(fieldsError).some(field => fieldsError[field]);
  }
class HorizontalLoginForm extends React.Component {
    componentDidMount() { /*componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。*/
        this.props.form.validateFields();
    }
    handleSubmit = e => {
        e.preventDefault();
        this.props.form.validateFields((err, values) => {
            if (!err) {
                console.log('Received values of form:', values);
            }
        });
    };
    render() {
        /* 
        getFieldDecorator:用于和表单进行双向绑定,详见下方描述
        getFieldError:获取某个输入控件的 Error
        getFieldsError	获取一组输入控件的 Error ,如不传入参数,则获取全部组件的 Error
        isFieldsTouched	判断是否任一输入控件经历过 getFieldDecorator 的值收集时机 options.trigger
        */
        const { getFieldDecorator, getFieldsError, getFieldError, isFieldTouched } = this.props.form;
        
        const usernameError = isFieldTouched('username') && getFieldError('username');
        const passwordError = isFieldTouched('password') && getFieldError('password');


        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 prefix={<Icon type="user" style={{ color: 'rgba(0,0,0,.25)' }} />}
                            placeholder="Username"//placeholder 属性提供可描述输入字段预期值的提示信息(hint)
                        />,
                    )
                    }
                </Form.Item>
                <Form.Item validateStatus={passwordError ? 'error' : ''} help={passwordError || ''} >
                    {getFieldDecorator(
                        'password', {
                        rules: [
                            { required: true, message: 'Please input your Password!' }
                        ],
                    })(<Input prefix={<Icon type="lock" style={{ color: 'rgba(0,0,0,.25)' }} />}
                        type="password"
                        placeholder="Password"
                        />)}
                </Form.Item>
                <Form.Item>
                    <Button type = 'primary'  htmlType = 'submit' disabled ={hasErrors(getFieldsError())}>
                        log in
                    </Button>
                 </Form.Item>
            </Form>
        )

    }
}
const WrappedHorizontalLoginForm = Form.create({ name: 'horizontal_login' })(HorizontalLoginForm)
ReactDOM.render(<WrappedHorizontalLoginForm />, document.getElementById('container'));

内联表单需要用到的一些方法和属性说明

From 属性

参数说明类型
layout表单布局‘horizontal’|‘vertical’|‘inline’
onSubmit数据验证成功后回调事件Function(e:Event)

Form.create(options)

class CustomizedForm extends React.Component {}

CustomizedForm = Form.create({})(CustomizedForm);

options 的配置项如下

参数说明类型
name设置表单域内字段 id 的前缀

经过 Form.create 包装的组件将会自带 this.props.form 属性注意:使用 getFieldsValue getFieldValue setFieldsValue 等时,应确保对应的 field 已经用 getFieldDecorator 注册过了。

getFieldDecorator用于和表单进行双向绑定,详见下方描述
getFieldError获取某个输入控件的 ErrorFunction(name)
getFieldsError获取一组输入控件的 Error ,如不传入参数,则获取全部组件的 ErrorFunction([names: string[]])
validateFields校验并获取一组输入域的值与 Error,若 fieldNames 参数为空,则校验全部组件( [fieldNames: string[]], [options: object], callback(errors, values) ) => void
isFieldTouched判断一个输入控件是否经历过 getFieldDecorator 的值收集时机 options.trigger(name: string) => boolean

一个 Form.Item 建议只放一个被 getFieldDecorator 装饰过的 child 当有多个被装饰过的 child 时,help required validateStatus 无法自动生成。

参数说明类型默认值
help提示信息,如不设置,则会根据校验规则自动生成string|ReactNode
validateStatus校验状态,如不设置,则会根据校验规则自动生成,可选:‘success’ ‘warning’ ‘error’ ‘validating’string

this.props.form.getFieldDecorator(id, options)

经过 getFieldDecorator 包装的控件,表单控件会自动添加 value(或 valuePropName 指定的其他属性) onChange(或 trigger 指定的其他属性),数据同步将被 Form 接管,这会导致以下结果:

  • 不再需要也不应该onChange 来做同步,但还是可以继续监听 onChange 等事件
  • 你不能用控件的 value defaultValue 等属性来设置表单域的值,默认值可以用 getFieldDecorator 里的 initialValue
  • 你不应该用 setState,可以使用 this.props.form.setFieldsValue 来动态改变表单值。
参数说明类型默认值
id必填输入控件唯一标志。支持嵌套式的写法string
options.rules校验规则,参考下方文档object[]

校验规则

参数说明类型默认值
required是否必选booleanfalse
message校验文案string|ReactNode

Input

参数说明类型默认值
type声明 input 类型,同原生 input 标签的 type 属性,见:MDN(请直接使用 Input.TextArea 代替 type="textarea")。stringtext
prefix带有前缀图标的 inputstring|ReactNode
placeholderplaceholder 属性提供可描述输入字段预期值的提示信息(hint)。该提示会在输入字段为空时显示,并会在字段获得焦点时消失。stringtext

Icon

参数说明类型默认值
type图标类型。遵循图标的命名规范string
style设置图标的样式,例如 fontSizecolorCSSProperties

<Icon type="lock" style={{ color: 'rgba(0,0,0,.25)' }} />

Button

属性说明类型默认值
type设置按钮类型,可选值为 primary dashed danger link(3.17 中增加) 或者不设string
htmlType设置 button 原生的 type 值,可选值请参考 HTML 标准stringbutton
disabled按钮失效状态booleanfalse

Object.keys()

**Object.keys()**方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值