javascript - 无法在 Material UI 中选中循环中的复选框
问题描述
我正在使用 Material-UI 和 React Hooks。我正在运行一个循环,在其中打印复选框。我无法选中或取消选中它们。它们似乎是只读的。当我点击它们时没有任何反应。我登录控制台查看,挂钩工作正常,selectedExpertArr
状态正在正确更新,但未检查复选框。
代码如下:
const [selectedExpertArr, setSelectedExpertArr] = useState([]);
处理函数如下:
const handleSelectedExperts = (e) => {
console.log('selectedExpertArr')
let clonedExpertArr = [...selectedExpertArr];
if(e.target.checked === true) {
clonedExpertArr.push(e.target.value)
setSelectedExpertArr(clonedExpertArr);
} else {
let filtered = selectedExpertArr.filter((expert) => {
return expert !== e.target.value;
});
clonedExpertArr = filtered;
setSelectedExpertArr(clonedExpertArr);
}
}
循环代码如下:
<DialogContent>
<List>
{expertNames.map(expert => (
<ListItem button key={expert.id}>
<Checkbox
checked={(selectedExpertArr.indexOf(expert.id) > -1)? true : false }
name="expertCheckbox"
onChange={handleSelectedExperts}
value={expert.id}
color="primary"
inputProps={{ 'aria-label': 'expert checkbox' }}
/>
<ListItemText primary={expert.username} />
</ListItem>
))}
</List>
</DialogContent>
解决方案
是e.target.value
字符串类型,但似乎expert.id
是数字。所以你要添加到clonedExpertArr
字符串但搜索数字(selectedExpertArr.indexOf(expert.id) > -1)
要更正,请转换e.target.value
为数字+e.target.value
更正后的代码将是
const handleSelectedExperts = (e) => {
console.log('selectedExpertArr')
let clonedExpertArr = [...selectedExpertArr];
if(e.target.checked === true) {
clonedExpertArr.push(+e.target.value)
setSelectedExpertArr(clonedExpertArr);
} else {
let filtered = selectedExpertArr.filter((expert) => {
return expert !== +e.target.value;
});
clonedExpertArr = filtered;
setSelectedExpertArr(clonedExpertArr);
}
}
工作演示
推荐阅读
- flutter - 如何在不同 UI 和不同手机尺寸之间同步 Flutter 应用
- tsql - 根据 TSQL 中的另一个表值更改返回的字段
- vue.js - 如何使用矩阵创建 v 滑块?
- pandas-profiling - Pandas 分析工具用于识别重复行的方法是什么?
- python - 为什么我的 lambda 在调用时似乎没有做任何事情?
- css - 如何在 flexbox 容器中换行之前移除垂直管道
- linux - Linux 终端 - 将大量十六进制字节从文本文件转换为 ASCII
- http-status-code-500 - Craft CMS 3 - 某些页面上的内部服务器错误
- ios - UIScrollView 不在 UITableViewCell 中滚动
- node.js - 如何删除猫鼬中子文档的参考文档?