reactjs - 在 Material UI 中控制多个复选框
问题描述
我有一个带有几个复选框的下拉菜单,我正在尝试在每个复选框上添加 onClick 事件。但是当我选中其中一个复选框时,它们都被选中。这是我试图做的:
const [isChecked, setIsChecked] = React.useState(false);
const isCheckboxChecked = () => {
setIsChecked(isChecked ? false : true)
}
return menuItems.map((item, index) => (
<React.Fragment>
<MenuItem
value={item.value}
selected={item.value === value}
key={index}
>
<Checkbox
key={index}
checked={isChecked}
onClick={() => isCheckboxChecked()}
>
<Label>{item.label}</Label>
</Checkbox>
</MenuItem>
{index === 2 || index === 3 ? <hr /> : null}
</React.Fragment>
));
据我了解,所有复选框都使用相同的状态isChecked
,我想知道如何使它们独立。
解决方案
您可以在状态变量中创建一组检查值,isChecked
而不仅仅是一个布尔值。您的isCheckboxChecked
方法(我已将其重命名为更合适的名称toggleCheckboxValue
)现在需要一个index
参数来定位并切换相应的复选框值。
现在isChecked
使用数组填充值menuItems
,每个复选框从创建的数组中获取一个元素,最后,您需要传递index
给onClick
复选框的事件处理程序。
const [isChecked, setIsChecked] = React.useState(menuItems.slice().fill(false));
const toggleCheckboxValue = (index) => {
setIsChecked(isChecked.map((v, i) => (i === index ? !v : v)));
}
return menuItems.map((item, index) => (
<React.Fragment>
<MenuItem value={item.value} selected={item.value === value} key={index}>
<Checkbox key={index} checked={isChecked[index]}
onClick={() => toggleCheckboxValue(index)}>
<Label>{item.label}</Label>
</Checkbox>
</MenuItem>
{index === 2 || index === 3 ? <hr /> : null}
</React.Fragment>
));
注意:如果数组的长度,menuItems
则必须相应地更新。isChecked
toggleCheckboxValue
推荐阅读
- reactjs - 对 https://registry.npmjs.org/expo-template-blank 的请求失败,原因:连接 ETIMEDOUT 104.16.21.35:443
- javascript - 表单构建器中已弃用的 react-native-listview 错误
- javascript - 如何在已创建的编辑器上设置数据?
- database - Nodetool Rebuild :- 有时流失败
- c++ - 如何在 C++ 和 Boost 中将数组参数传递给 TCP 客户端的函数
- c - 无限循环后是否需要返回语句?
- boto3 - 如何使用 python boto3 读取和修改 SSM 参数
- reactjs - React-Native 如何清除内部导航堆栈?
- python - 访问对象属性/列表访问之间的速度差异?
- python - 列表中的流函数等高线图