簡體   English   中英

JSX.Element 作為接口 TS 中的道具

[英]JSX.Element as props in interface TS

我有一個組件接口,它應該以 JSX.Element 作為道具,我通常如何做到這一點? 現在我使用 ReactNode,但是當我嘗試顯示圖標時它不起作用

export interface firstLevelMenuItem {
  route: string;
  name: string;
  icon: ReactNode;
}
import { Courses, Books, Products, Services } from "@/components/UI";
const firstLevelMenu: firstLevelMenuItem[] = [
  {
    route: "courses",
    name: "Курсы",
    icon: Courses,
  },
];

const buildFirstLevel = (): JSX.Element => {
    return (
      <>
        {firstLevelMenu &&
          firstLevelMenu.map((el) => (
            <div key={el.route}>
              <a href={`/${el.route}`}>
                <div
                  className={cn(styles.firstLevel, {
                    [styles.firstLevelActive]: el.id == firstCategory,
                  })}
                >
                  {el.icon} // doesn't show
                  <span>{el.name}</span>
                </div>
              </a>
            </div>
          ))}
      </>
    );
  };

圖標組件示例:

const Courses = (): JSX.Element => {
  return (
    // some svg
  );
};

export default Courses;

您正在嘗試呈現函數 (?) Courses或其他任何內容。 如果要將其呈現為 JSX 元素,則必須將其編寫為 JSX 元素:

const firstLevelMenu: firstLevelMenuItem[] = [
  {
    route: "courses",
    name: "Курсы",
    icon: <Courses />,
  },
];

或者,在渲染代碼中將其渲染為 JSX 元素:

firstLevelMenu.map((el) => (
    const Icon = el.icon;
    <div key={el.route}>
        <a href={`/${el.route}`}>
        <div
            className={cn(styles.firstLevel, {
            [styles.firstLevelActive]: el.id == firstCategory,
            })}
        >
            <Icon />
            <span>{el.name}</span>
        </div>
        </a>
    </div>
))}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM