react-data-grid v7如何同时使用表头过滤与列重排序多渲染器
react-data-grid v7 同时实现列重排序与表头过滤方案
react-data-grid v7 没有限制单个表头渲染器的功能逻辑,你可以直接把两个功能的实现逻辑整合到同一个自定义表头组件中,具体实现步骤如下:
- 合并表头渲染逻辑:列重排序的核心是给表头元素绑定拖拽相关的事件处理器,表头过滤的核心是在表头中渲染过滤交互组件,两者没有逻辑冲突,可以放在同一个自定义组件中实现。
- 改造列配置:不需要分开调用多个渲染器,只需要给每个列的配置项传入自定义的
headerRenderer,同时传入过滤、重排序两类相关的参数即可,参考代码如下:
// 自定义通用表头组件 function CustomHeader(props) { const { column, dragHandleProps, filterValue, onFilterChange, onSort, sortDirection } = props; return ( <div className="custom-header"> {/* 重排序拖拽锚点 */} <span {...dragHandleProps} className="drag-icon" onMouseDown={(e) => e.stopPropagation()} >⋮⋮</span> {/* 列名 + 排序触发 */} <span className="column-title" onClick={() => onSort(column.key)}> {column.name} {sortDirection ? (sortDirection === 'ASC' ? '↑' : '↓') : ''} </span> {/* 过滤输入组件 */} <input type="text" className="filter-input" value={filterValue ?? ''} onChange={(e) => onFilterChange(column.key, e.target.value)} placeholder="输入过滤内容" /> </div> ) }
- 分开维护功能状态:分别维护两组独立状态即可,一组是存储各列过滤值的
filters对象,一组是重排序后的columns数组,两组状态的更新逻辑完全独立互不影响。 - 给DataGrid绑定对应属性:分别传入重排序对应的
onColumnsReorder回调,和过滤对应的行过滤逻辑即可。
注意:如果你参考了官方的重排序示例逻辑,只需要把原示例中的表头替换成上面的自定义带过滤的表头组件,不需要修改重排序的核心拖拽逻辑。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

