React 实战 | antd form表单验证,同时支持onBlur与onChange事件验证

本文介绍了如何在antd表单中实现onBlur和onChange事件的独立验证规则。默认情况下,表单验证仅在onBlur事件触发。但通过深入理解getFieldDecorator的rules选项,可以设置validate触发时机和规则。示例代码展示了如何为同一个表单字段定义并分别应用onBlur和onChange事件的验证规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常使用ant design的表单验证时,我们直接在getFieldDecorator中使用rules来定义校验规则,默认的触发校验规则则的事件validateTriggeronChange,也就是说,触发onblur事件时不会校验其中的规则。

 <FormItem {
   
   ...formItemLayout} label="文章标题">
	  {
   
   getFieldDecorator('title', {
   
   
	    rules: [{
   
   
	      required: true,
	      message: '请输入标题',
	    }]
### React 中 Select 组件回显功能的最佳实践 在 React 应用程序中,`react-select` 是一个非常流行的库用于创建可定制的选择框组件。为了实现 `react-select` 的默认值设置或数据回显功能,可以采用 Controlled Component 或 Uncontrolled Component 方式来管理其状态。 #### 1. 使用 Controlled Component 实现默认值 Controlled Component 是通过父组件的状态 (state) 来控制子组件的值的一种方式。在这种模式下,可以通过传递 `value` 属性给 `react-select` 并监听 `onChange` 事件来动态更新选中的选项[^2]。 以下是具体代码示例: ```javascript import React, { useState } from 'react'; import Select from 'react-select'; const MySelect = ({ defaultValue }) => { const [selectedOption, setSelectedOption] = useState(defaultValue); return ( <Select value={selectedOption} onChange={(option) => setSelectedOption(option)} options={[ { value: 'chocolate', label: 'Chocolate' }, { value: 'strawberry', label: 'Strawberry' }, { value: 'vanilla', label: 'Vanilla' } ]} /> ); }; export default MySelect; ``` 在这个例子中,`defaultValue` 被用来初始化 `useState` 的初始状态,并将其赋值给 `react-select` 的 `value` 属性[^1]。 --- #### 2. 使用 Redux Form 集成 `react-select` 当 Redux Form 结合时,可以通过 `Field` 组件将 `react-select` 封装为受控组件。Redux Form 提供了 `input.value` 和 `input.onChange` 方法来同步表单字段的状态。 以下是一个集成的例子: ```javascript import React from 'react'; import { Field } from 'redux-form'; import Select from 'react-select'; const renderSelectField = ({ input, meta: { touched, error }, children, ...custom }) => ( <div> <Select {...input} {...custom} value={input.value || null} onChange={(val) => input.onChange(val)} onBlur={() => input.onBlur(input.value)} > {children} </Select> {touched && error && <span>{error}</span>} </div> ); const MyForm = () => ( <Field name="mySelect" component={renderSelectField} options={[ { value: 'chocolate', label: 'Chocolate' }, { value: 'strawberry', label: 'Strawberry' }, { value: 'vanilla', label: 'Vanilla' } ]} /> ); ``` 在这里,`input.value` 被直接映射到 `react-select` 的 `value` 属性,而 `input.onChange` 则负责处理用户的交互行为[^1]。 --- #### 3. Ant Design 表单的数据回显 对于基于 Ant Design 的项目,通常会使用 `Form` 组件及其内置的方法(如 `setFieldsValue`)来实现数据回显[^3]。下面展示了一个完整的流程: ##### 初始化表单并加载远程数据 ```javascript import React, { useEffect } from 'react'; import { Form, Select } from 'antd'; const MyAntdForm = () => { const [form] = Form.useForm(); useEffect(() => { fetch('/api/data') .then((res) => res.json()) .then((data) => form.setFieldsValue({ selectKey: data.selectValue })); }, []); return ( <Form form={form}> <Form.Item name="selectKey" label="Choose Option"> <Select> <Select.Option value="apple">Apple</Select.Option> <Select.Option value="banana">Banana</Select.Option> </Select> </Form.Item> </Form> ); }; ``` 上述代码展示了如何利用 `useEffect` 加载外部 API 数据并通过 `setFieldsValue` 更新表单项的值[^4]。 --- #### 注意事项 - 如果需要支持多选,则应确保传入的 `value` 类型为数组。 - 对于异步场景下的数据加载,建议先禁用组件 (`disabled`),待数据准备就绪后再启用它。 - 当结合 Redux 状态管理工具时,请注意保持全局状态的一致性和性能优化。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值