Reactjs 设置单选值之前,Antd RadioGroup onChange将触发

Reactjs 设置单选值之前,Antd RadioGroup onChange将触发,reactjs,antd,Reactjs,Antd,我用的是ant设计,我和一个无线电组有麻烦。在我看来,RadioGroup上的onChange处理程序在单击单选按钮时启动,但在设置该单选按钮的值之前启动 下面是一些示例代码 const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => { console.log('field value', getFieldValue(name)); // previous value, not changed value.

我用的是ant设计,我和一个无线电组有麻烦。在我看来,RadioGroup上的onChange处理程序在单击单选按钮时启动,但在设置该单选按钮的值之前启动

下面是一些示例代码

const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
console.log('field value', getFieldValue(name)); // previous value, not changed value.
};

const component =
getFieldDecorator &&
getFieldDecorator(name, {
  initialValue: value,
  rules: formatValidations(validations)
})(
  <RadioGroup name={name} onChange={handleChange}>
    <Radio value={1} key={1}>1</Radio>
    <Radio value={2} key={2}>2</Radio>
    <Radio value={3} key={3}>3</Radio>
  </RadioGroup>
);
constHandleChange=(e:React.ChangeEvent)=>{
log('field value',getFieldValue(name));//以前的值,未更改的值。
};
常数分量=
getFieldDecorator&&
getFieldDecorator(名称{
initialValue:value,
规则:formatValidations(验证)
})(
1.
2.
3.
);
运行此
handleChange
函数时,字段值错误。第一次单击radio 1时,该值未定义。然后单击2,值为1。换句话说,onChange事件被触发,但是单选按钮的值还没有设置,我只能得到之前设置的值。有人看到我的实现有什么问题吗

另外,
e.target.value
是预期的更改值(它与getFieldValue值不匹配)


谢谢

如果您想立即获得值,您应该真正使用
e.target.value
。由于在单击收音机时尚未设置该值(到antd表单为止)。(该字段需要传递setStatus、setfeedback等)

如果您真的想使用getFieldValue,可以执行setTime strick

setTimeout(() => console.log(this.props.form.getFieldValue('radio-group')), 0)

antd
支持建议在
Form.create()中使用
onValuesChange

我找到了适合我的解决方法:

<Radio.Group
 onChange={(e: RadioChangeEvent) => {
   form.setFieldsValue({ yourRadioFieldNameFromGetFieldDecorator: e.target.value }, () => {
      handleChange();
   });
 }}
>
{
form.setFieldsValue({yourRadioFieldNameFromGetFieldDecorator:e.target.value},()=>{
handleChange();
});
}}
>

回调确保设置了字段值。

哪里定义了
RadioChangeEvent
?@MarcusJuniusBrutus它是
onChange
函数的事件参数类型。如果您使用的是VSCode,请右键单击
我使用的是Emacs,我没有想象得到的最复杂的设置。你能提供进口声明吗。例如:
从“antd”导入{radiochangeent}
不起作用。@MarcusJuniusBrutus这里是
从“antd/lib/radio”导入{radiochangeent}