我有一个代码可以切换表格中的所有复选框,如下所示:
const tblData = dummyData;
const [ allToggled, setAllToggled ] = useState(false);
const [ toggled, setToggled ] = useState(false);
const handleToggleAll = allToggled => {
let selectAll = !allToggled;
setAllToggled(selectAll);
let toggledCopy = [];
tblData.forEach(function (e, index) {
toggledCopy.push(selectAll);
});
setToggled(toggledCopy);
}
const handleToggle = index => {
let toggledCopy = toggled;
setToggled[index] = toggled[index];
if( toggledCopy[index] === false ){
setAllToggled(false);
}
}
和反应表部分:
Header: state => (
<input
type="checkbox"
checked={allToggled}
onChange={() => handleToggleAll(allToggled)}
/>
),
Cell: row => (
<input
type="checkbox"
checked={toggled[row.index]}
/>
)
一切正常,直到我使用handleToggleAll
。它将所有复选框都切换为true
状态,但是当我取消选中handleToggleAll
时,我无法将它们重新设置为true
,任何一个复选框都不能再被选中。>
答案 0 :(得分:1)
那很奇怪-我检查并切换了所有功能,但是效果很好,但是普通的切换功能却无法正常工作,而且因为您未在代码中调用setToggled,所以无法正常运行...
const tblData = [1, 2, 3, 4];
const [ allToggled, setAllToggled ] = useState(false);
const [ toggled, setToggled ] = useState(
Array.from(new Array(tblData.length), () => false)
);
const handleToggleAll = allToggled => {
let selectAll = !allToggled;
setAllToggled(selectAll);
let toggledCopy = [];
tblData.forEach(function (e, index) {
toggledCopy.push(selectAll);
});
setToggled(toggledCopy);
}
const handleToggle = index => {
let toggledCopy = [...toggled];
toggledCopy[index] = !toggledCopy[index];
setToggled(toggledCopy);
if (toggledCopy.every(v => v)) {
setAllToggled(true);
} else if (allToggled) {
setAllToggled(false);
}
}