网站搜索

reactjs - 动态生成的 Material UI 单选按钮无法点击


演示链接: https://codesandbox.io/s/material-demo-9fwlz

虽然看起来这段代码应该有可选的单选元素,但实际上并没有。有什么想法是哪里出问题了吗?这是从 material-ui 示例代码片段派生的,唯一的修改是 RadioGroup 中的单选元素是根据输入的 props 动态生成的。

export default function RadioButtonsGroup(props) {
  const [value, setValue] = React.useState(null);

  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    setValue((event.target as HTMLInputElement).value);
  };

  return (
    <FormControl component="fieldset">
      <FormLabel component="legend">Gender</FormLabel>
      <RadioGroup
        aria-label="gender"
        name="gender1"
        value={value}
        onChange={handleChange}
      >
        {props.options.map(([value, readable], index) => (
          <FormControlLabel
            key={index}
            value={value}
            control={<Radio />}
            label={readable}
          />
        ))}
      </RadioGroup>
    </FormControl>
  );
}

答案#1

随便吧,我只是个笨蛋。

  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    setValue((event.target as HTMLInputElement).value);
  };

event.target.value 的类型是 string。我的值是 number。

const handleChange = (e) => {
  setValue(Number(e.target.value));
}

太好了,那值变成了一个 string 什么的。

答案#2

如果你的值是一个数字,那么使用 toString() 将这个数字转换成字符串

<FormControlLabel
key={index}
value={value.toString()}
control={<Radio />}
label={readable}
/>