import React, {useState} from 'react'; const createForm = Cmp => props => { const [formData, setFormData] = useState({}) const rules = {} return ( <div> <Cmp {...props} getFieldDecorator={(name, options) => { if (options.rules) { rules[name] = [...options.rules] } return (formItem) => React.cloneElement(formItem, { name, value: formData[name] || '', onChange: e => { setFormData({...formData, [name]: e.target.value}) } }) }} getFieldValue={fieldName => formData[fieldName]} getFieldsValue={() => ({...formData})} validateFields={cb => { const err = [] Object.keys(rules).forEach(key => { rules[key].forEach(rule => { if (rule['required'] === true && (!formData[key] || formData[key].trim() === '')) { err.push(rule['message'] || (key + '为必填项!')) } }) }) cb(err.length ? err : undefined, formData) }} /> </div> ) } function Form(props) { return ( <div> { props.getFieldDecorator('name', {rules: [{'required': true, 'message': '用户名为必填项!'}]})(<input type="text"/>) } { props.getFieldDecorator('password', {rules: [{'required': true, 'message': '密码为必填项!'}]})(<input type="password" name="" id=""/>) } <button onClick={() => { props.validateFields((err, values) => { if (err) { console.log('验证失败', err) } else { console.log('验证通过', values) } }) }}>提交 </button> </div> ) } export default createForm(Form);