TDesign的Table组件如何实现跨页选择数据?
在用TDesign的Table组件开发带分页的表格时,遇到跨页选择数据的问题。我尝试把选中的rowKey存到数组里,但切换分页后选中的行没有保留,状态好像被重置了,这是为什么呢?
代码是这样写的:
export default {
data() {
return {
selectedRowKeys: [],
allData: [/* 大量分页数据 */],
}
},
methods: {
handleSelectChange({ selectedRowKeys }) {
this.selectedRowKeys = selectedRowKeys
}
}
}
当切换分页时currentPageData变了,但selectedRowKeys里的ID如果不在当前页就会消失。该怎么让选中的行在跨页时保持选中状态呢?
具体做法是:把所有选中的
rowKey存在一个全局数组里(你已经这么做了),然后在每次加载数据时,遍历allData,给每个数据项加上一个_checked字段(或者类似的标志位),表示它是否被选中。以下是改写后的代码:
注意几点:
1. 在
handleSelectChange方法里用了Set去重,防止重复选择同一个rowKey。2. 每次分页切换时重新计算当前页数据的选中状态。
3. 如果是从后端拉取数据,记得在请求回来后再调用
updateCurrentPageData。最后提醒一下,如果
rowKey是用户可控的(比如直接传入了前端参数),要做校验,防止注入攻击或者其他安全性问题。虽然看起来只是个简单功能,但安全细节不能忽略。直接上改造后的代码:
然后在Table组件的配置里加上这两个属性:
-
row-key:绑定到getRowKey方法。-
reserve-selection:设置为true,告诉组件需要保留选中状态。最后记得在渲染表格行时,根据
isRowSelected方法来动态设置选中状态。这样改的好处是用
Set结构查重和判断更快,性能更高,特别是在大数据量的情况下。别忘了确保每行数据都有唯一的id或类似字段作为rowKey,不然会出问题。