刷新AgGrid后如何重新选中更新前最后一次选中的行
实现思路
你当前的代码仅在点击单元格时触发选中,AG Grid刷新后原有行节点会被销毁重建,因此需要额外做两步逻辑:存储最后选中的行ID、数据刷新后恢复选中。
具体修改步骤
- 在组件state中新增字段存储最后选中的行ID
state = { // 保留你原有state内容 lastSelectedRowId: null }
- 选中行时更新存储的ID,推荐在
onSelectionChanged回调中处理,覆盖所有选中触发场景(点击、键盘操作等)
onSelectionChanged = params => { const selectedRows = params.api.getSelectedRows() if (selectedRows.length) { const selectedRow = selectedRows[0] this.setState({ lastSelectedRowId: selectedRow.id }) // 你原有选中后的业务逻辑可以移到这里 this.props.actions.selectMarketingProspect(selectedRow) this.props.actions.getMarketingCustomerNotes(this.props.dealerID, selectedRow.id) } else { this.setState({ lastSelectedRowId: null }) } }
- 给AG Grid添加数据更新完成回调,恢复选中状态
首先在AgGridReact组件上新增事件绑定:
<AgGridReact {/* 保留你原有所有配置 */} onRowDataUpdated={this.restoreLastSelectedRow} />
然后实现恢复选中的方法:
restoreLastSelectedRow = params => { const { lastSelectedRowId } = this.state if (!lastSelectedRowId) return // 你已配置getRowNodeId,可直接通过ID查找行节点 const targetNode = params.api.getRowNode(lastSelectedRowId) if (targetNode) { targetNode.setSelected(true, true) } }
注意事项
- 你已经开启了
deltaRowDataMode和getRowNodeId配置,完全匹配这个方案的前提要求,不需要额外修改基础配置 - 如果是你主动调用
api.setRowData()触发数据刷新,也可以在调用setRowData后直接执行恢复选中逻辑,不需要依赖事件回调,可控性更高
内容的提问来源于stack exchange,提问作者chewie
相关产品推荐
相关产品推荐

