You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Ant Design中包裹在Form.Item内的Select选择器的值

问题原因

Ant Design Form 组件会默认接管所有设置了name属性的Form.Item内部表单项的状态,优先级高于用户自行声明的useState状态。你自己修改外部value状态时,Form 内部维护的对应表单项状态没有同步更新,所以 Select 不会响应状态变化。删除Form.Item后脱离了 Form 的状态管控,你自己的useState逻辑就会正常生效。

另外你现有代码存在一个语法问题:Button的onClick事件直接绑定了setValue('pp'),会在组件渲染时立即执行赋值逻辑而非点击时触发,需要改成箭头函数包装。

解决方案

分两种适用场景:

方案1:使用Form内置状态管理(推荐,适合常规表单场景)

不需要自行声明useState维护表单项值,直接通过 Form 实例操作表单状态:
第一步,创建 Form 实例:

import { useForm, Form, Select, Button } from 'antd';

// 组件内部声明
const [form] = useForm();

第二步,绑定 Form 实例并修改触发逻辑:

<Form form={form}>
  <Form.Item 
    name="value" 
    rules={[{ required: true, message: 'Veuillez choisir une valeur !' }]}
    label="Type"
  >
    <Select>
      <Select.Option value="pp">Personne physique</Select.Option>
      <Select.Option value="mp">Personne morale</Select.Option>
    </Select>
  </Form.Item>

  <Button type="primary" onClick={() => form.setFieldValue('value', 'pp')}>Click me</Button>
</Form>

后续要获取表单值可以调用form.getFieldValue('value'),或者在form.validateFields()提交时自动获取所有表单项值。

方案2:自行维护状态(适合需要单独管控表单项的特殊场景)

删掉Form.Item的name属性,Form 就不会接管该表单项的状态,修正事件绑定写法即可正常运行:

const [value, setValue] = useState(null);

// 组件内容
<Form.Item 
  rules={[{ required: true, message: 'Veuillez choisir une valeur !' }]}
  label="Type"
>
  <Select value={value} onChange={e => setValue(e)}>
    <Select.Option value="pp">Personne physique</Select.Option>
    <Select.Option value="mp">Personne morale</Select.Option>
  </Select>
</Form.Item>

<Button type="primary" onClick={() => setValue('pp')}>Click me</Button>

使用该方案提交表单时,需要自行把value值整合到提交参数中。


内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:54:02