如何在react-bootstrap-table2中基于行数据动态禁用行选择checkbox
问题描述

目前我通过硬编码nonSelectable: [1, 2]实现了第1、2行不可选择的效果。现在我需要根据文件的createdByID字段判断行是否可选:如果文件的createdByID与当前登录用户ID一致则行可选,否则不可选。
我现在遇到的问题是:如何获取每一行的行数据,将其createdByID与用户ID比对后,把需要禁用checkbox的行索引整理为数组,传给nonSelectable属性?我找到了相关的问题讨论,但不确定如何实现,因为我不清楚要从哪里获取对应的key值。
解决方案
你可以直接遍历表格的原始数据源,按需筛选出不可选的行key集合,具体步骤如下:
- 先确认你给
<BootstrapTable>组件配置的keyField属性值,这个字段是你每行数据的唯一标识,后续收集的不可选行key就取这个字段的值 - 遍历你的表格数据源,把
createdByID不等于当前登录用户ID的条目,对应keyField字段的值收集为数组,直接传给selectRow配置的nonSelectable属性即可
代码示例
基于行唯一标识配置
// 当前登录用户ID const currentUserId = '你当前登录用户的ID' // 表格数据源 const tableData = [/* 你的原始表格数据 */] // 表格列配置 const columns = [/* 你的列配置 */] // 筛选不可选行的key集合(假设keyField配置为'id') const nonSelectableRows = tableData .filter(item => item.createdByID !== currentUserId) .map(item => item.id) // 行选择配置 const selectRow = { mode: 'checkbox', nonSelectable: nonSelectableRows, // 其余原有配置保持不变 } // 表格组件渲染 <BootstrapTable keyField='id' data={tableData} columns={columns} selectRow={selectRow} />
基于行索引配置
如果你需要沿用之前用行索引作为不可选标识的逻辑,改用如下方式生成数组即可:
const nonSelectableRows = tableData .map((item, index) => item.createdByID !== currentUserId ? index : null) .filter(val => val !== null)
内容的提问来源于stack exchange,提问作者Lance
相关产品推荐
相关产品推荐

