需求:添加一个可切换的按钮,当按钮切换时,antd 表单某一项变为默认的固定值且不能更改(以下代码已脱敏),且可以根据接口数据回显。
线上 demo,可点击预览
需要注意的是:initialValues 不能被 setState 动态更新,可以使用 form.setFieldsValue 来动态改变表单值。
添加一个可切换的按钮:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
const [platform, setPlatform] = useState(''); const [form] = Form.useForm();
function onChange(e: any) { let res = e.target.value; setPlatform(res); }
<Radio.Group onChange={(e) => onChange(e)} value={platform}> <Radio.Button value="phone">手机</Radio.Button> <Radio.Button value="pc">电脑</Radio.Button> </Radio.Group>
|
表单:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <Form form={form} name="basic" initialValues={{ select: 'phone' }} > <Form.Item name="select"> // 监听platform 改变成pc时,触发表单disabled禁用输入 <Select disabled={platform === 'pc'} mode="tags"> <Option value="1">{platform}</Option> </Select> </Form.Item> </Form>
|
监听 platform,当变成 pc 时,使用 form.setFieldsValue (),触发表单更改成默认值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| useEffect(() => { if (platform === 'pc') {
form.setFieldsValue({ select: 'pc' });
} else {
form.setFieldsValue({ select: 'phone' }); } }, [platform]);
|