NextJs 错误:元素类型无效:使用 Heroicons 时需要一个字符串

Posted

技术标签:

【中文标题】NextJs 错误:元素类型无效:使用 Heroicons 时需要一个字符串【英文标题】:NextJs Error: Element type is invalid: expected a string When using Heroicons 【发布时间】:2021-08-12 05:39:39 【问题描述】:

我正在尝试构建一个使用 Tailwind CSS 和 Heroicons 的应用程序。但是,当我使用一些特定图标时,应用程序会中断(VeiwGridIcon、ChatIcon、BellIcon、CHeneronDownIcon)。我已经使用了其他运行良好的图标,但由于某种原因,只有它们有效。我已经尝试重新安装 Tailwind 和 Hericons,但得到了相同的结果。我还仔细检查了我的导入,但它们都是正确的。

输出/错误信息:

代码:

index.js

import Head from "next/head";
import Header from "../components/Header";

export default function Home() 
  return (
    <div>
      <Head>
        <title>Facebook</title>
      </Head>

      /* Header */
      <Header />

      <main>
        /* Sidebar */
        /* Feed */
        /* Widgets */
      </main>
    </div>
  );

Header.js(出现问题的代码):

import Image from "next/image";
import 
  BellIcon,
  ChatIcon,
  CheveronDownIcon,
  HomeIcon,
  UserGroupIcon,
  ViewGridIcon,
 from "@heroicons/react/solid";
import 
  FlagIcon,
  PlayIcon,
  SearchIcon,
  ShoppingCartIcon,
 from "@heroicons/react/outline";
import HeaderIcon from "./HeaderIcon";

function Header() 
  return (
    <div
      className="sticky top-0 z-50 bg-white flex 
    items-center p-2 lg:px-5 shadow-md"
    >
      /* Left */
      <div className="flex items-center">
        <Image
          src="https://links.papareact.com/5me"
          width=40
          height=40
          layout="fixed"
        />
        <div className="flex ml-2 items-center rounded-full bg-gray-100 p-2">
          <SearchIcon className="h-6 text-gray-600" />
          <input
            className="hidden md:inline-flex ml-2 items-center bg-transparent outline-none placeholder-gray-500 flex-shrink"
            type="text"
            placeholder="Search Facebook"
          />
        </div>
      </div>

      /* Center */
      <div className="flex justify-center flex-grow">
        <div className="flex space-x-6 md:space-x-2">

          <HeaderIcon active Icon=HomeIcon />
          <HeaderIcon Icon=FlagIcon />
          <HeaderIcon Icon=PlayIcon />
          <HeaderIcon Icon=ShoppingCartIcon />
          <HeaderIcon Icon=UserGroupIcon />
        </div>
      </div>

      /* Right */
      <div className="flex items-center sm:space-x-2 justify-end">
        /* Profile Pic */
        <p className="whitespace-nowrap font-semibold pr-3">
          Anish Kunapareddy
        </p>
        // This code seems to be wrong
        <ViewGridIcon />
        <ChatIcon />
        <BellIcon />
        <CheveronDownIcon />
      </div>
    </div>
  );


export default Header;

HeaderIcon.js

function HeaderIcon( Icon, active ) 
  return (
    <div
      className="flex items-center cursor-pointer
    md:px-10 sm:h-14 md:hover:bg-gray-100 rounded-xl
    active:border-b-2 active:border-blue-500 group"
    >
      <Icon
        className=`h-5 text-gray-500 text-center sm:h-7 mx-auto 
      group-hover:text-blue-500 $active && "text-blue-500"`
      />
    </div>
  );


export default HeaderIcon;

globals.css

@tailwind base;
@tailwind components;
@tailwind utilities;

@layer components 
  .icon 
    @apply hidden xl:inline-flex p-2 h-10 w-10;
  

【问题讨论】:

【参考方案1】:

这是因为导入的图标不存在。 您从“@heroicons/react”导入的内容是错误的。

我看到“@heroicons/react/solid”中不存在“CheveronDownIcon”

请检查您的代码。

【讨论】:

以上是关于NextJs 错误:元素类型无效:使用 Heroicons 时需要一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

Next Js 错误:元素类型无效:预期为字符串(对于内置组件)或类/函数(对于复合组件)但得到:未定义

useRef() 无效的钩子调用 [NextJs]

Hooks 错误:在 Windows 上使用 NextJS 或 ReactJS 的 Hook Call 无效

未捕获的错误:元素类型无效

反应错误:元素类型无效:需要一个字符串

在 React Native 中使用组件导入获取错误“元素类型无效预期字符串”