react中返回表单组件的小坑

本文介绍了一个在React中使用input标签时常见的错误:忘记闭合标签。通过对比错误和正确的代码示例,展示了如何避免这一问题,确保组件能够正常渲染。
import React from 'react'

export default class CmtListUpdateEvent extends React.Component {
	constructor(){
	super()
	this.state = {}
	}

	render(){
	return <div><input type="button" value="修改"></div>
	}

}

报错
然后发现是input不完整,
补齐就行了 也算一个小坑吧。

import React from 'react'

export default class CmtListUpdateEvent extends React.Component {
	constructor(){
	super()
	this.state = {}
	}

	render(){
	return <div><input type="button" value="修改" /></div>
	}

}

这样就对了 sublime text的自动补齐就容易碰到这种小坑

<think> 我们正在讨论React和Ant Design的表单校验。根据用户的需求和提供的引用,我们需要提供有关使用Ant Design的表单组件进行校验的方法和示例。 引用[1]提到:在React Ant Design中实现自定义的表单验证逻辑,以及Ant Design提供了丰富的表单功能如动态增减表单项、表单联动等。 引用[2]提到:react结合ant的坑(最开始接触react遇到的难点),其中包含表单上传图片、自定义校验等内容。 因此,我们将重点介绍Ant Design表单校验的基本用法、自定义校验规则以及一些常见问题的解决方法。 注意:我们使用Ant Design 4.x版本的Form组件,因为这是当前主流版本。 步骤: 1. 引入Form组件,使用Form.create创建表单(在4.x中,我们也可以使用函数式组件和hooks)。 2. 使用Form.Item包裹每个表单项,并设置rules属性定义校验规则。 3. 自定义校验规则可以通过函数来实现。 由于Ant Design 4.x同时支持类组件和函数式组件,我们将分别给出两种示例。 另外,引用[2]中提到了自定义校验,我们将重点说明。 同时,注意引用[1]中提到的动态增减表单项和表单联动,虽然用户当前主要关注校验,但可以简要提及作为扩展。 我们将按照以下结构回答: 一、基本表单校验 二、自定义校验规则 三、表单提交与校验 四、常见问题(如重置、动态表单校验等) 五、完整示例 由于用户要求生成相关问题,我们将在最后添加相关问题部分。 注意:在回答中,代码块使用Markdown格式。 </think> ### React 结合 Ant Design 表单校验指南 #### 一、基本表单校验方法 1. **内置校验规则** Ant Design 提供常用校验规则(如必填、邮箱、手机号等): ```jsx <Form.Item label="邮箱" name="email" rules={[ { type: 'email', message: '请输入有效邮箱' }, { required: true, message: '邮箱为必填项' } ]} > <Input /> </Form.Item> ``` 2. **自定义校验函数** 通过 `validator` 实现复杂逻辑: ```jsx const passwordValidator = (_, value) => { if (/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/.test(value)) { return Promise.resolve(); } return Promise.reject('密码需包含大小写字母和数字,长度至少8位'); }; <Form.Item name="password" rules={[{ validator: passwordValidator }]} > <Input.Password /> </Form.Item> ``` #### 二、动态表单校验 1. **条件校验** 实现字段联动校验: ```jsx <Form.Item dependencies={['payment']}> {({ getFieldValue }) => ( <Form.Item name="cardNumber" rules={[ { required: getFieldValue('payment') === 'card', message: '银行卡号必填' } ]} > <Input /> </Form.Item> )} </Form.Item> ``` 2. **动态增减表单项** 使用 `Form.List` 实现数组字段校验: ```jsx <Form.List name="contacts"> {(fields, { add, remove }) => ( fields.map((field) => ( <Form.Item {...field} key={field.key} label={`联系人${field.name + 1}`} rules={[{ required: true, message: '联系人不能为空' }]} > <Input /> </Form.Item> )) )} </Form.List> ``` #### 三、表单提交处理 ```jsx const onFinish = (values) => { console.log('校验通过:', values); }; const onFinishFailed = (errorInfo) => { console.log('校验失败:', errorInfo); }; <Form onFinish={onFinish} onFinishFailed={onFinishFailed} > {/* 表单项... */} <Button type="primary" htmlType="submit">提交</Button> </Form> ``` #### 四、常见问题解决方案 1. **图片上传校验** 验证文件类型和大小: ```jsx <Form.Item name="avatar" rules={[ { validator: (_, file) => file?.type?.includes('image/') ? Promise.resolve() : Promise.reject('仅支持图片格式'), validator: (_, file) => file?.size < 5 * 1024 * 1024 ? Promise.resolve() : Promise.reject('文件大小超过5MB') } ]} > <Upload beforeUpload={() => false} accept="image/*"> <Button>上传头像</Button> </Upload> </Form.Item> ``` 2. **表单重置问题** 使用 `form.resetFields()` 重置时保留初始值: ```jsx const [form] = Form.useForm(); const handleReset = () => form.resetFields(); <Form form={form}>{/* ... */}</Form> <Button onClick={handleReset}>重置</Button> ``` > 完整示例参考:[Ant Design 表单文档](https://ant.design/components/form-cn/)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值