文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

React报错Elementtypeisinvalid解决案例

2022-12-19 12:01

关注

总览

产生"Element type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got"错误有多个原因:

为了解决该错误,确保使用大括号来导入命名导出而不是默认导出,并且只使用函数或类作为组件。

这里有个示例来展示错误是如何发生的。

// ?️ must be function or class (NOT variable)
const Button = <button>Click</button>;
export default function App() {
  // ⛔️ Warning: React.jsx: type is invalid -- expected a string
  // (for built-in components) or a class/function
  // (for composite components) but got:
  return (
    <div>
      <Button />
      <h1>hello world</h1>
    </div>
  );
}

上述代码问题在于,我们声明了Button变量,该变量返回了JSX代码。

函数组件

为了解决该错误,我们必须使用函数组件来代替。

// ?️ is now function
const Button = () => {
  return <button>Click</button>;
};
export default function App() {
  return (
    <div>
      <Button />
      <h1>hello world</h1>
    </div>
  );
}

现在,Button是一个函数,并返回JSX代码。可以作为一个React组件使用。

混淆导入导出

另一个常见的错误原因是混淆了默认和命名的导入和导出。

当组件使用默认导出来导出时,你必须确保导入的时候没有使用大括号。

// Header.js
// ?️ default export
export default function Header() {
  return <h2>Hello world</h2>;
}

现在,它必须不带大括号导入。

// ?️ default import
import Header from './Header';
export default function App() {
  return (
    <div>
      <Header />
    </div>
  );
}

另一方面,如果你的组件使用命名导出来导出的话,它必须使用大括号导入。

// Header.js
// ?️ named export
export function Header() {
  return <h2>Hello world</h2>;
}

现在,当组件被导入时,它必须包裹在大括号内。

// ?️ named import
import {Header} from './Header';
export default function App() {
  return (
    <div>
      <Header />
    </div>
  );
}

确保你没有将一个组件作为默认导出,并试图将其作为命名导入(用大括号包裹),或者反过来。因为这是导致错误的一个常见原因。

如果错误尚未解决,确保重启你的开发服务以及IDE。

检查路径

你还应该确保指向模块的路径拼写正确,大小写正确以及指定导出组件的文件。

确保路径正确的最好方法是删除它,开始输入路径,让你的IDE用自动补全来帮助你。

如果你开始输入路径后没有得到自动补全,很可能是你的路径不正确。

使用ESM

确保你没有混淆ES ModulesCommonJS语法。

你应该在你的React.js应用程序中只使用import/export语法,而不是module.exportsrequire()语法。

从react-router-dom导入

当我们从react-router而不是react-router-dom导入东西时,有时也会出现这个错误。

// ⛔️ BAD
// import {Link} from 'react-router';
// ✅ GOOD
import {Link} from 'react-router-dom';

如果你使用react router,请确保从react-router-dom导入,而不是从react-router中。

当我们试图使用不是函数或类的东西作为一个组件时,会产生"Element type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got:"错误信息。

错误信息

你应该看一下got:后面的错误信息,因为它可能表明是什么原因导致的错误。

当我们使用一个组件时,我们必须确保它是一个函数或一个类。如果你使用任何其他的值作为一个组件,就会引起错误。

以上就是React报错Element type is invalid解决案例的详细内容,更多关于React报错Element type invalid的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯