如何移除react-table中存在子列时出现的空表头?
解决react-table中嵌套列导致的空表头问题
这个问题的核心原因是你的列结构混合了分组列(Id列带子列)和普通列(First Name等),react-table会根据列的层级生成表头行:顶层表头行由最外层列的Header组成,分组列会占据对应子列数量的单元格,而普通列因为没有对应的外层Header,就会生成空的表头单元格。
给你两种靠谱的解决方法:
方法一:统一列结构,把普通列包裹进分组
把First Name、Last Name这些列放到一个外层分组里,哪怕外层分组的Header设为空,这样顶层表头就只有两个分组,不会有空单元格:
export const Columns = [ { Header:"Id", columns:[ { Header:'Id1', accessor:'id' }, { Header:'Id2', // accessor:'id' }, ] }, { Header:"", // 外层分组表头设为空,不显示内容 columns: [ { Header:"First Name", accessor:'first_name', colSpan:2 }, { Header:"Last Name", accessor:'last_name' }, { Header:"Email", accessor:'email' }, { Header:"Gender", accessor:'gender' } ] } ]
如果不想看到空的外层表头,渲染时可以加个判断,不显示空内容的表头单元格:
<th {...header.getHeaderProps()}> {header.Header && header.render('Header')} </th>
方法二:自定义表头渲染,过滤空单元格
如果不想改列结构,可以在渲染顶层表头时,直接过滤掉那些空的表头单元格:
{headerGroups.map((headerGroup, index) => ( <tr {...headerGroup.getHeaderGroupProps()}> {headerGroup.headers.map((header) => { // 只在顶层表头过滤空单元格 if (index === 0 && !header.Header && !header.columns) { return null; } return ( <th {...header.getHeaderProps(header.getSortByToggleProps())}> {header.render('Header')} <span> {header.isSorted ? (header.isSortedDesc ? ' 🔽' : ' 🔼') : ''} </span> </th> ); })} </tr> ))}
注意:这种方法要小心表头对齐问题,建议优先用第一种方法,保持列结构的一致性,避免后续出现其他布局问题。
内容的提问来源于stack exchange,提问作者Kalaiyarasan Annadurai
相关产品推荐
相关产品推荐

