You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextUI Table中使用自定义组件包裹TableRow报错咨询

NextUI Table 封装TableRow报错问题解析

问题本质:NextUI的内部约束,不是你的实现错误

这个报错是NextUI Table组件的设计限制导致的——它要求TableBody的直接子节点必须是官方提供的TableRow组件,不能是自定义的中间组件。

两种写法的核心差异

官方正常写法

官方示例中TableBody直接嵌套TableRow,NextUI的Table组件会直接识别到子节点是自身的TableRow,调用其内部的getCollectionNode方法来管理行的状态、索引、集合关系等核心逻辑,所以能正常渲染。

自定义封装写法

当你把TableRow包在自定义Test组件里时,TableBody的直接子节点变成了你的自定义组件,而非NextUI原生的TableRow。NextUI会尝试调用子节点的getCollectionNode方法来维护表格内部集合,但自定义组件并没有这个方法,因此抛出TypeError: type.getCollectionNode is not a function。

可行的解决方式

不要封装整个TableRow,而是封装TableRow内部的单元格内容,示例如下:

// 只封装行内的单元格逻辑
const RowContent = ({ rowData }) => (
  <>
    <TableCell>{rowData.id}</TableCell>
    <TableCell>{rowData.title}</TableCell>
    <TableCell>{rowData.status}</TableCell>
  </>
);

// 使用时保留TableRow作为TableBody的直接子节点
<TableBody>
  {dataList.map(row => (
    <TableRow key={row.id}>
      <RowContent rowData={row} />
    </TableRow>
  ))}
</TableBody>

内容的提问来源于stack exchange,提问作者supah0t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:02:12