开发者问题收集

错误:元素类型无效:预期为字符串(用于内置组件)]但得到:未定义。 Nextjs,React

2022-07-31
190

我收到此错误,不知道我遗漏了什么!

我有三个文件,HeaderOption.js,HeaderOptions.js,Search.js

这是HeaderOptions.js的代码

import HeaderOption from "./HeaderOption";
import  DotsVerticalIcon from "@heroicons/react/outline";

import  MapIcon from "@heroicons/react/outline";
import  NewspaperIcon from "@heroicons/react/outline";
import  PlayIcon from "@heroicons/react/outline";
import  SearchIcon from "@heroicons/react/outline";
import  PhotographicIcon from "@heroicons/react/outline";

   function HeaderOptions() {
    return (
     <div>
        {/* Left */}
        <div className="flex space-x-6">
            <HeaderOption Icon={SearchIcon} tile="All" Selected /> 
            <HeaderOption Icon={PhotographicIcon} tile="Images" />
            <HeaderOption Icon={PlayIcon} tile="Videos" />
            <HeaderOption Icon={NewspaperIcon}  tile="News" />
            <HeaderOption Icon={MapIcon}  tile="Maps" />
            <HeaderOption Icon={DotsVerticalIcon}   tile="More" />

        </div>


        {/* Right */}
        <div className="flex space-x-4">
            <p className="link">Settings</p>
            <p className="Link">Tools</p>

        </div>
    </div>
    );
}

export default HeaderOptions;

HeaderOption.js

function HeaderOption({Icon, title, selected}) 
{
    return (
        <div className={`flex`}>
            <Icon className="h-4" />
            <p className="hidden sm:inline-flex">{title}</p>

        </div>
    );
         
} 
  

export default HeaderOption;

我收到上述错误,我检查了两次导入,非常感谢您的帮助

1个回答

我认为您可能不完全清楚 ES6 导入的工作原理。

import foo from 'bar'

将模块“bar”的默认导出分配给 foo。如果没有默认导出,foo 将未定义。

import  MapIcon from "@heroicons/react/outline";
import  NewspaperIcon from "@heroicons/react/outline";
import  PlayIcon from "@heroicons/react/outline";
import  SearchIcon from "@heroicons/react/outline";

所有这些变量都将具有相同的值,即默认导出,在您的情况下未定义。

使用命名导出(带花括号),一切都应该正常工作。

关于如何在将来解决这个问题的建议。我不确定您做了什么来“检查导入”,但只需记录或调试以查看这些导入变量的值就可以准确地告诉您发生了什么。

Nick Bailey
2022-07-31