javascript - .map 中反应单选按钮的条件显示/隐藏
问题描述
我有一个单选按钮,当它为真/选中时,它将该选项显示为选择。我遇到的问题是,在我的无线电组映射中,所有选项都被选为 true。这是一个代码框示例 - https://codesandbox.io/s/73k0onx32x
<RadioGroup
aria-label="matches"
name="matches"
value={String(this.state.value)}
onChange={this.handlePersonToggle}
>
{data.map(person => (
<FormControlLabel
onClick={e => this.setState({ checked: !this.state.checked })}
checked={this.state.checked}
key={String(person.Id)}
value={String(person.Id)}
control={<Radio color="primary" />}
label={
<div>
{this.state.checked === true && <div>if true show</div>}
</div>
}
/>
))}
</RadioGroup>
任何帮助将不胜感激。
解决方案
这是工作演示:https ://codesandbox.io/s/l261qp002m
最终代码
class RadioButtonsGroup extends React.Component {
state = {
value: 1
};
handlePersonToggle = event => {
// console.log(typeof event.target.value) //string
this.setState({ value: event.target.value });
};
render() {
const { classes } = this.props;
return (
<RadioGroup
aria-label="matches"
name="matches"
value={String(this.state.value)}
>
{data.map(person => {
return (
<FormControlLabel
onClick={e => this.handlePersonToggle(e)}
key={String(person.Id)}
value={String(person.Id)}
control={<Radio color="primary" />}
label={
<div>
{this.state.value == person.Id ? <div>if true show</div> : ""}
</div>
}
/>
);
})}
</RadioGroup>
);
}
}
有几件事我们需要解决。
首先,我们不需要组件的checked
属性,FormControlLabel
也不需要管理检查的状态,只要和组件的value
属性就足够了,只要它们匹配,它就会知道选择了哪个选项。RadioGroup
FormControlLabel
其次,由于我们正在传递 String(this.state.value)
,因此,我们event.target.value
成为 astring
而不是 a integer
。因此,我们不能使用严格比较===
,而是使用了==
。
最后,我们为组件onClick
上的事件编写事件处理程序。FormControlLabel
推荐阅读
- html - 使用 z-index 将前景元素移动到背景中的网格之前
- javascript - 有没有办法编辑 WebComponent 的 CSS/JS?
- laravel - 如何在我的 laravel 代码中链接 2 个现有模型?
- spss - 从 SPSS 的调查中删除“IDK”以进行基本分析是否更合理?
- php - 每次在 PHP 中调用函数时,如何返回一个构建新表行的字符串?
- json - Type '_' has no member 'id' SwiftUI
- javascript - 如何从每种类型的单独数组切换到具有所有值的单个数组?
- bash - 尝试在 BASH 脚本中指定发件人地址 - 遇到 mailx: 非法选项 - r 错误
- symmetricds - 主数据库是否需要位于运行 symmetricds 的同一主机中?
- nosql - 有没有办法在 FaunaDB + GraphQL 上设置字段级授权?