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

如何在HeroUI/NextUI动态表格中访问嵌套属性?

解决HeroUI/NextUI动态表格访问嵌套属性的问题

你可以通过实现一个支持嵌套路径解析的自定义函数来替代官方的getKeyValue,具体步骤如下:

1. 实现嵌套属性获取函数

写一个能按.分割的路径逐层访问对象属性的函数,同时处理中间属性不存在的情况以避免报错:

const getNestedValue = (obj: any, path: string) => {
  return path.split('.').reduce((current, key) => {
    return current && current[key] !== undefined ? current[key] : '';
  }, obj);
};

2. 替换表格中的取值逻辑

把原来调用getKeyValue的地方换成自定义的getNestedValue即可:

// imports ...
// nextjs page component...

interface Album {
  name: string;
}

interface Track {
  name: string;
  album: Album;
  id: string; // 补充id类型,原代码中用到了item.id
}

const tableColumns = [
  { label: "标题", key: "name" },
  { label: "专辑", key: "album.name" },
];

const [tracks, setTracks] = useState<Track[]>();

// fetch tracks ...

const getNestedValue = (obj: any, path: string) => {
  return path.split('.').reduce((current, key) => {
    return current && current[key] !== undefined ? current[key] : '';
  }, obj);
};

return (
  <Table className="table-auto">
    <TableHeader columns={tableColumns}>
      {(column) => (
        <TableColumn key={column.key}>{column.label}</TableColumn>
      )}
    </TableHeader>
    <TableBody items={tracks}>
      {(item) => (
        <TableRow key={item.id}>
          {(columnKey) => (
            <TableCell>{getNestedValue(item, columnKey)}</TableCell>
          )}
        </TableRow>
      )}
    </TableBody>
  </Table>
);

3. 可选:类型安全版本(进阶)

如果需要在编译时检查路径合法性、避免拼写错误,可以用泛型实现类型安全的版本:

type Path<T> = T extends object ? {
  [K in keyof T]: K extends string ? `${K}` | `${K}.${Path<T[K]>}` : never
}[keyof T] : never;

const getNestedValue = <T, P extends Path<T>>(obj: T, path: P) => {
  return path.split('.').reduce((current, key) => {
    return current && current[key as keyof typeof current];
  }, obj);
};

使用这个版本时,columnKey的路径会被TypeScript校验,比如输入album.nme这类错误路径会直接在编译阶段报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:50:01