这个 warning 提示我们在使用 antd
的 Form.Item
组件时有个问题:
如果要控制表单输入域的值,我们不能使用 defaultValue
来指定默认值。因为这样的话,组件的状态将不受控制,无法通过组件设置新的值。
相反,此时正确的做法是在 <Form>
组件中使用 initialValues
属性来设置表单的初始值:
import { Form, Input, Button } from 'antd';
const initialValues = {
name: 'John',
age: 30,
address: 'New York',
};
const MyForm = () => {
const onFinish = (values) => {
console.log('Received values:', values);
};
return (
<Form
name="basic"
initialValues={initialValues}
onFinish={onFinish}
>
<Form.Item
label="Name"
name="name"
rules={[{ required: true, message: 'Please input your name!' }]}
>
<Input />
</Form.Item>
<Form.Item
label="Age"
name="age"
rules={[{ required: true, message: 'Please input your age!' }]}
>
<Input />
</Form.Item>
<Form.Item
label="Address"
name="address"
rules={[{ required: true, message: 'Please input your address!' }]}
>
<Input />
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Form>
);
};
export default MyForm;
这样,在组件中,可以通过 Form.Item
组件中的 name
prop 来控制表单域的值,而初始值则由 <Form>
组件中的 initialValues
prop 提供。这种方式可以让我们更好地控制表单的状态。