功能描述:
在一个modal中,根据父组件传过来的data 将表单Rado.group 进行初始化选中,并且能更改radio状态 并获取value值
初始值的设置:
× 思路1:通过form的initialValues属性来设置各个item的初始值,对input 文本类型的起作用,radiogroup无效;
× 思路2:通过form.item中的initialValue属性 ,也是不起作用
×思路3:radioGroup的defaultValue 来设置,对于直接设置的常量 起作用,对于传值过来的变量无效
√思路4:radioGroup 中的value属性来设置 选中值,有效
更改radio状态 并获取value值:
× 思路1:通过value形式 来设置初始值,一开始设置的初始值直接用的是data中的值,导致无法切换radio值,虽然每次都触发onchange方法,原因是:props中的属性是只读的,无法修改。
<Radio.Group onChange={onChange} value={props.data.radioValue} >
<Radio value='1'>1</Radio>
<Radio value='2'>2</Radio>
<Radio value='3'>3</Radio>
</Radio.Group>
×思路2:既然无法修改props属性,干脆就把onChange方法写在父组件中,在父组件中修改data中的radioValue值,这种方式却是是能够达到初始化值切能切换radio的值,但是随之而来的问题是,每次切换radio都会导致data更新,从而让modal页面中其他已输入好的input中的内容清空
√思路3:通过useState+ form.setFieldsValue 来切换radio 和更改value值,一定要通过setFieldsValue来更改value 不然提交表单的时候 获取到的value值是undefined
const [radioValue, setRadioValue] = useState(data?.radioValue);
const onChange = (e) => {
form.setFieldsValue({ formItemName: e.target.value });
setRadioValue(e.target.value)
return e.target.value;
};
<Form.Item
name="formItemName"
label="label">
<Radio.Group onChange={onChange} value={radioValue} >
<Radio value='1'>1</Radio>
<Radio value='2'>2</Radio>
<Radio value='3'>3</Radio>
</Radio.Group>
</Form.Item>