javascript - React - 多个取消选择时复选框不会更新
问题描述
当我单击 + 按钮展开组并单击组 1 的复选框时,它按预期执行。
但问题是,
如果我先单击组 1 的复选框,然后通过单击 + 按钮展开组,
它会显示所有用户单击的正确,如果我再次单击组 1
的复选框,则组 1 的复选框变为未选中,但不会取消选中用户的复选框。
重现步骤:刷新页面>单击组1复选框>单击+展开>再次单击组1复选框>然后您将看到用户复选框不会被取消选中
解决方案
您的isExist
方法返回undefined
而不是false
,将其修复为始终返回true
/ false
。
isExist = (id, group) => {
if (!this.props.selected) {
console.log("selected = null");
return false;
}
return (
this.props.selected.find((ele) => ele.id === group + id) !== undefined
);
};
这样您就不必手动将其返回值转换为boolean
using !!
。
我建议也将您的handleSelected
方法重构为
handleSelected = async (e) => {
const { selected } = this.state;
if (e.target.checked) {
let temp = { id: e.target.id, name: e.target.name };
return this.setState({ selected: [...selected, temp] });
}
this.setState({
selected: selected.filter(({ id }) => id !== e.target.id)
});
};
推荐阅读
- go - 模拟慢速 TCP 3 次握手
- jenkins - Jenkins 内存消耗高的常见原因
- laravel - Laravel 6.x,我正在尝试将 URL 主页更改为自定义自己的 URL。因为我正在构建身份验证默认登录和注册
- c# - 哪些服务执行“services.AddRazorPages();” 居然加?
- python - 您如何“永久”删除 Mlflow 中的实验?
- amazon-web-services - 使用 CloudFormation 将 LambdaFunctionAssociation 添加到现有 CloudFront 分配
- sql - 如何避免这种嵌套查询
- ejabberd - 为什么 mysql 表“muc_room”存储不持久空间?
- javascript - 尝试向 LI 元素添加单击事件处理程序并获取警报框中的内容
- react-native - 获取 null 不是对象(评估“scratchImagePath.uri”),尽管我正在传递值?