javascript - 来自配置的 React 和 Typescript 动态组件
问题描述
我正在尝试使用 reactjs 和 typescript 构建一个动态菜单系统。
我的配置如下所示:
import {TableIcon} from "@heroicons/react/solid";
type route = {
icon: React.ReactNode,
path: string,
title: string,
}
export const navRoutes = () : route[] => {
return [
{
icon: TableIcon,
path: '/',
title: 'Home'
},
]
}
在我的导航组件中,我正在做
{navRoutes().map((item) => (
<a key={item.title} href={item.path}>
<item.icon /> // also tried {item.icon}
{item.title}
</a>
))}
我收到一个错误TS2604: JSX element type 'item.icon' does not have any construct or call signatures.
我在没有按预期工作的打字稿的情况下做了类似的事情——谁能告诉我我做错了什么?
解决方案
React.ReactNode
是渲染组件的类型。例如:
const a: React.ReactNode = <TableIcon />
如果你想传入一些渲染的JSX,那就是你会使用的。但听起来你想传入一个没有道具的功能组件,然后将其渲染。
React.FC
是没有道具的反应功能组件的通用类型。这可能就是你想要的类型。
type route = {
icon: React.FC,
path: string,
title: string,
}
推荐阅读
- angular - 无法获得嵌套的 formControlName 离子
- javascript - 如何替换图像中的特定颜色范围?
- jquery - 请纠正这个 jQuery 脚本
- php - php中未定义的索引错误(下拉过滤器不起作用)
- qt - QCustomPlot 在网格上设置 pixamp
- python - 使用 google-colaboratory 上传到谷歌驱动器的文件的路径是什么?
- sql - SQL 结果显示在两个查询中
- javascript - 如何用搜索到的文本替换不同的 div 标签?
- excel - 指数回归:将数学符号转换为 Excel 语法
- python - 转换大型数据框 - 花费太长时间