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

Grommet UI与TypeScript中List组件子元素类型错误求助

问题分析与解决方案

你的问题出在Grommet List组件的渲染方式使用错误,它不支持将渲染函数直接作为children传入,需要通过专门的属性来指定列表项的渲染逻辑。

错误原因

  • Grommet的List组件中,children属性接收的是普通React节点(如静态文本、组件),而非函数类型,所以直接传函数会触发TypeScript类型不匹配错误。
  • 用Fragment包裹函数后,组件依然不会将children视为可调用的函数,因此会抛出TypeError: children is not a function。

修正后的代码

import { List } from "grommet";
import { ResourceLink, ResourceLinkProps } from "./ResourceLink";

type ResourceListProps = {
  resources: ResourceLinkProps[],
}

const ResourceList: React.FC<ResourceListProps> = ({resources}) => {
  return (
    <List 
      data={resources} 
      border={false} 
      pad="none"
      renderItem={(resource: ResourceLinkProps) => (
        <ResourceLink 
          id={resource.id} 
          name={resource.name} 
          urlPart={resource.urlPart} 
        />
      )}
    />
  );
};

export default ResourceList;

关键改动

将原本作为children的渲染函数,移到List组件的renderItem属性上。Grommet的List会自动遍历data数组,调用renderItem函数生成每个列表项的内容,这才是组件设计的正确用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:20:43