Material UI textfield 'disable' 道具不会更新超过一次
Material UI textfield 'disable' prop won't update more than once
尝试制作一个程序,其中有无线电开关,每个无线电开关等同于不同的布尔值。根据布尔值,它会使文本字段上的 'disable' 属性为 true 或 false。我的代码允许按钮默认 selected 为启用编辑,当我 select 禁用它时禁用文本字段。但是,如果我单击禁用然后尝试再次单击启用,它不会将文本字段从禁用更改。
const [radioEdit, setRadioEdit] = React.useState(false);
<RadioGroup
value={radioEdit}
onChange={(e) => setRadioEdit(e.target.value)}
aria-labelledby="demo-radio-buttons-group-label"
name="radio-buttons-group"
row
>
<FormControlLabel
value={true}
control={<Radio />}
label="Disabled"
/>
<FormControlLabel
value={false}
control={<Radio />}
label="Enabled"
/>
<p>{String(radioEdit)}</p>
<TextField
id="outlined-basic"
variant="outlined"
size="small"
////////RIGHT HERE////////
value={data["companyname"]}
disabled={radioEdit}
/>
如果 radioEdit 的默认状态不是 'false',它会自动禁用(设置为 true 或 null)并且不会让我多次更新它。
问题出在您用 RadioGroup
定义的 onChange
上。通常,我们定义
onChange={(e) => setRadioEdit(e.target.value)}
设置文本输入onEventChangeHandler 的值。但这里是单选按钮。我正在使用打字稿来找到这个问题的答案,当我 copy-pasted 你的代码时,它向我显示了 setRadioEdit(e.target.value)
处的错误,而 setRadioEdit
应该是布尔值。 TypeScript 超级有用的原因。
答案是
onChange={() => setRadioEdit(!radioEdit)}
我正在这里切换我的状态 onChange
。所以当我们把setRadioEdit
设置为true
时,实际上radioEdit
会被设置为true
。这就是 useState
钩子的工作原理。所以通过定义 setRadioEdit(!radioEdit)
我们正在切换状态。如果它是 true
,它会变为 false
,反之亦然。
您还必须关闭 </RadioGroup>
组件。完整答案
const [radioEdit, setRadioEdit] = useState(false);
return (
<>
<RadioGroup
value={radioEdit}
onChange={(e) => setRadioEdit(!radioEdit)}
aria-labelledby="demo-radio-buttons-group-label"
name="radio-buttons-group"
row
>
<FormControlLabel value={true} control={<Radio />} label="Disabled" />
<FormControlLabel value={false} control={<Radio />} label="Enabled" />
</RadioGroup>
<p>{String(radioEdit)}</p>
<TextField
id="outlined-basic"
variant="outlined"
size="small"
disabled={radioEdit}
/>
</>
);
尝试制作一个程序,其中有无线电开关,每个无线电开关等同于不同的布尔值。根据布尔值,它会使文本字段上的 'disable' 属性为 true 或 false。我的代码允许按钮默认 selected 为启用编辑,当我 select 禁用它时禁用文本字段。但是,如果我单击禁用然后尝试再次单击启用,它不会将文本字段从禁用更改。
const [radioEdit, setRadioEdit] = React.useState(false);
<RadioGroup
value={radioEdit}
onChange={(e) => setRadioEdit(e.target.value)}
aria-labelledby="demo-radio-buttons-group-label"
name="radio-buttons-group"
row
>
<FormControlLabel
value={true}
control={<Radio />}
label="Disabled"
/>
<FormControlLabel
value={false}
control={<Radio />}
label="Enabled"
/>
<p>{String(radioEdit)}</p>
<TextField
id="outlined-basic"
variant="outlined"
size="small"
////////RIGHT HERE////////
value={data["companyname"]}
disabled={radioEdit}
/>
如果 radioEdit 的默认状态不是 'false',它会自动禁用(设置为 true 或 null)并且不会让我多次更新它。
问题出在您用 RadioGroup
定义的 onChange
上。通常,我们定义
onChange={(e) => setRadioEdit(e.target.value)}
设置文本输入onEventChangeHandler 的值。但这里是单选按钮。我正在使用打字稿来找到这个问题的答案,当我 copy-pasted 你的代码时,它向我显示了 setRadioEdit(e.target.value)
处的错误,而 setRadioEdit
应该是布尔值。 TypeScript 超级有用的原因。
答案是
onChange={() => setRadioEdit(!radioEdit)}
我正在这里切换我的状态 onChange
。所以当我们把setRadioEdit
设置为true
时,实际上radioEdit
会被设置为true
。这就是 useState
钩子的工作原理。所以通过定义 setRadioEdit(!radioEdit)
我们正在切换状态。如果它是 true
,它会变为 false
,反之亦然。
您还必须关闭 </RadioGroup>
组件。完整答案
const [radioEdit, setRadioEdit] = useState(false);
return (
<>
<RadioGroup
value={radioEdit}
onChange={(e) => setRadioEdit(!radioEdit)}
aria-labelledby="demo-radio-buttons-group-label"
name="radio-buttons-group"
row
>
<FormControlLabel value={true} control={<Radio />} label="Disabled" />
<FormControlLabel value={false} control={<Radio />} label="Enabled" />
</RadioGroup>
<p>{String(radioEdit)}</p>
<TextField
id="outlined-basic"
variant="outlined"
size="small"
disabled={radioEdit}
/>
</>
);