javascript - 第二次点击后反应复选框被(取消)选中
问题描述
下面是列出动态复选框的反应组件的一部分:
<div className="pb-4">
<p>Choose the task owner(s):</p>
{
peerIds.map(id => {
if (currentUserId != id)
return (
<label className="checkbox-inline mr-3">
<input onChange={onChange_TaskOwner}
type="checkbox"
name="taskowner"
checked={st_taskOwnersId.filter(function (item) {return (item == id)}).length > 0}
value={peers[id].id} />
<span>{peers[id].fullName}</span>
</label>
)
})
}
<div style={{ clear: 'both' }}></div>
</div>
在上面的代码checked
中,如果当前 id 已经处于名为st_taskOwnersId
.
hook
我使用如下方式存储检查项目的 ID 。onChange_TaskOwner
函数更新st_taskOwnersId
取决于它是checked
还是unchecked
:
const [st_taskOwnersId, set_taskOwnersId] = useState([] as any);
const onChange_TaskOwner = (event) => {
event.preventDefault();
if (event.target.checked)
set_taskOwnersId([...st_taskOwnersId, event.target.value]);
else
set_taskOwnersId(st_taskOwnersId.filter(function (item) {
return (item != event.target.value);
}));
}
代码运行没有错误。唯一的问题是我必须单击两次才能选中/取消选中复选框。我不知道为什么会这样。有什么帮助吗?
解决方案
我相信问题出在onChange_TaskOwner
功能上。您应该删除event.preventDefault();
呼叫。
我试图在这个codepen上重现你的组件,但没有event.preventDefault();
正常工作,如果你添加它,同样的错误开始发生。
推荐阅读
- c++ - 在具有不同模板参数集的模板类中使用模板化对象
- nanoframework - esp32 cam板串行上的.net Nano框架没有响应
- swiftui - 如何在 SwiftUI 中水平翻转形状?
- kubernetes - k8s 部署 EFS VolumeMount 仅作为 root:root 所有者安装,我如何指定特定用户?
- c - 为什么 C 头文件中的全局变量定义有效?
- laravel - Laravel 8:如何在多对多关系中播种数据透视表
- bash - 将函数调用分配给变量时终止 bash 脚本
- python - 自动将 matplotlib 图上传到非常简单的 http 服务器
- html - 如何将项目与弹性框方向列垂直对齐?
- javascript - 使用 jwt 验证 Web 套接字连接是否安全?