我有一个材质用户界面Table
,并一直在其上实现多选功能。
我的多重选择行为如下:
TableHead
将选择/取消选择所有行Table
。每行都有自己独特的个性id
。
我通过挂钩维护一个Set
被调用idsOfSelectedRows
,useState
以跟踪当前选中的所有行。
每个TableRow
都有一个Checkbox
像这样的
<Checkbox
className={
idsOfSelectedRows.size === 0 &&
styles.rowSelectionCheckboxStyle
}
onChange={() => handleRowSelectionCheckboxClick}
checked={idsOfSelectedRows.has(row.id)}
/>
和handleRowSelectionCheckboxClick
看起来像这样
const handleRowSelectionCheckboxClick = event => {
const idOfClickedRow = event.target.attributes.getNamedItem("id").value;
//If the checkbox has just become checked then add it to the idOfSelectedRows Set, otherwise remove it.
setIdsOfSelectedRows(
event.target.checked
? new Set(idsOfSelectedRows.add(String(idOfClickedRow)))
: () => {
idsOfSelectedRows.delete(String(idOfClickedRow));
return new Set(idsOfSelectedRows);
}
);
};
我的问题是,单击行上的复选框无响应。我可以通过单击中的全选 来选择全部Checkbox
,TableHead
但是单击单个行中的复选框不会更改其状态?
这是完整的CodeSandbox再现了确切的问题。我需要怎么做才能使行中的复选框可切换?
这行代码:event.target.attributes.getNamedItem("id").value;
不会提供所需的ID,因为没有传递ID,chekbox
因此应进行如下更改:
<Checkbox
id={row.id}
onChange={handleRowSelectionCheckboxClick}
checked={idsOfSelectedRows.has(row.id)}
/>
然后,像这样检索ID:
const idOfClickedRow = event.target.attributes.id.value;
handleRowSelectionCheckboxClick
一样,如示例中所示更改 函数调用。如果您喜欢带有匿名功能的解决方案,则应添加 ()
: onChange={() => handleRowSelectionCheckboxClick()}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句