8000 表单使用rc-form,校验并滚动到错误位置 · Issue #13 · xianzou/blog · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
表单使用rc-form,校验并滚动到错误位置 #13
Open
@xianzou

Description

@xianzou

表单使用rc-form,校验并滚动到错误位置

示例:
image

Form.js代码

使用import { createForm, formShape } from 'rc-form';的话,form没有提供validateFieldsAndScroll方法,然而ANTD FORM确有这个方法

这里使用import createDOMForm from 'rc-form/lib/createDOMForm';

createDOMForm提供validateFieldsAndScroll方法;

import React from 'react';
// import { createForm, formShape } from 'rc-form';
import createDOMForm from 'rc-form/lib/createDOMForm';
import FormItem from './components/FormItem/FormItem';

const warnMsg = msg => <p style={{ color: 'red', paddingTop: 5 }}>{msg}</p>;

class Form extends React.Component {
    submit = () => {
        // 验证并滚动到指定位置
        this.props.form.validateFieldsAndScroll((error, value) => {
            if (error) {
                console.log(error);
            } else {
                //校验通过
                console.log(value);
            }
        });
    }
    render() {
        // let errors;
        const { getFieldProps, getFieldError } = this.props.form;
        return (
            <div style={{ width: 600, margin: '0 auto' }}>
                <h2>登录系统</h2>
                <FormItem label="用户名" require>
                    <input
                        {...getFieldProps('applicantName', {
                            initialValue: '',
                            rules: [
                                {
                                    required: true,
                                    message: '户名不能为空'
                                }
                            ]
                        })}
                    />
                    {getFieldError('applicantName') && warnMsg(getFieldError('applicantName').join(','))}
                </FormItem>
                <FormItem label="密码" require>
                    <input
                        {...getFieldProps('applicantpwd', {
                            initialValue: '',
                            rules: [
                                {
                                    required: true,
                                    message: '密码不能为空'
                                }
                            ]
                        })}
                    />
                    {getFieldError('applicantpwd') && warnMsg(getFieldError('applicantpwd').join(','))}
                </FormItem>
                <button onClick={this.submit}>首选-按钮</button>
            </div>
        );
    }
}

export default createDOMForm()(Form);

FormItem.js代码:

FormItem只是展示,添加左右结构表单,并添加验证*号和引号的封装

import React from 'react';
import Styles from './FormItem.module.scss';
import cx from 'classnames';
const FormItem = ({ children, label, require }) => {
    return (
        <div className={Styles.formItem}>
            {
                label && <div className={cx(Styles.left, require ? Styles.require : '')}>{label}</div>
            }
            <div className={Styles.right}>
                {children}
            </div>
        </div>
    )
}

export default FormItem;

FormItem.module.scss

.formItem{
    overflow: hidden;
    display: flex;
    align-items: center;
    margin-bottom: 20px;
    .left{
        width: 80px;
    }
    .left::after{
        content: ""
    }
    .require::before{
        content: "*";
        color:red;
    }
    .right{
        flex: 1;
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0