如何限制Material React Table中每个单元格的文本长度?
问题
我使用MaterialReactTable的代码如下:
<MaterialReactTable columns={columns} data={emailResults} enableColumnFilters={false} enableMultiRowSelection={false} onRowSelectionChange={setRowSelection} ></MaterialReactTable>
我不想修改底层数据结构emailResults,因为这属于展示逻辑范畴,而且需要完整保留原始长度的数据。
解决方案
单独维护选中状态:如果是处理行选中逻辑,不要直接修改原始数据,用独立状态存储选中行的唯一标识(如ID),通过
getRowProps关联选中状态:const [selectedRowIds, setSelectedRowIds] = useState([]); const handleRowSelection = (newSelection) => { const ids = newSelection.selectedRows.map(row => row.id); setSelectedRowIds(ids); }; <MaterialReactTable columns={columns} data={emailResults} enableColumnFilters={false} enableMultiRowSelection={false} onRowSelectionChange={handleRowSelection} getRowProps={(row) => ({ selected: selectedRowIds.includes(row.id), })} />列定义层处理展示:若需修改单元格显示内容,直接在列配置中通过
Cell属性自定义渲染,完全不触碰原始数据:const columns = [ { accessorKey: 'email', header: '邮箱', Cell: ({ cell }) => <span className="text-blue-600">{cell.value}</span>, }, // 其他列配置 ];生成临时展示副本:如果需要对数据做临时转换(比如添加展示字段、格式转换),在组件内用
useMemo生成数据副本,原始数据保持不变:const displayData = useMemo(() => { return emailResults.map(item => ({ ...item, fullName: `${item.firstName} ${item.lastName}`, // 临时展示字段 })); }, [emailResults]); <MaterialReactTable columns={columns} data={displayData} enableColumnFilters={false} enableMultiRowSelection={false} onRowSelectionChange={setRowSelection} />
内容的提问来源于stack exchange,提问作者erotsppa
相关产品推荐
相关产品推荐

