有一种方法可以做到这一点。我希望这是一个传递给 Columns 对象的布尔值,但我们会得到我们能得到的。
我分叉了原始的 Hidden Columns 沙箱作为概念证明。相关部分是:
getToggleHideAllColumnsProps
您需要创建自己的 onClick 处理程序,而不是使用默认道具。column
公开一种toggleHidden
方法,该方法指示用户尝试切换该特定列时的行为。有点令人沮丧的是,即使您已经toggleHidden
为列实现了该方法,getToggleHideAllColumnsProps
完全忽略它,并且无论如何切换它的隐藏状态。
<div>
<IndeterminateCheckbox
onClick={() => allColumns.forEach(c => c.id !== "firstName" && c.toggleHidden())}
/>
Toggle All
</div>
幸运的是,它是一个相当简单的函数——只需遍历您的columns
对象并调用toggleHidden
每个对象。无论如何,为了稳健性,我在所需的列上包含了一个反对调用它的检查,但从技术上讲,你不需要这样做。
- 在某个地方,不知何故,您需要
toggleHidden
为所需的列定义函数。我在复选框的渲染方法中完成了它,但如果你在其他地方执行它,它的工作原理是一样的。当toggleHidden
为列定义函数时,它会按预期覆盖默认行为。因此,您可以只使用一个返回 null 的空函数,这将禁用手动关闭该列的功能。
allColumns.map((column) => {
if (column.id === "firstName") {
column.toggleHidden = () => null;
}
return ( /* ...jsx... */ );
})