React报错Element type is invalid解决案例

 更新时间:2022年12月19日 11:16:15   作者:chuck  
这篇文章主要为大家介绍了React报错Element type is invalid解决案例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

总览

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

  • 在导入组件时,将默认导入和命名导入混淆。
  • 忘记从文件中导出组件。
  • 不正确地定义了一个React组件,例如,作为一个变量而不是一个函数或类。

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

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

// 👇️ 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的资料请关注脚本之家其它相关文章!

相关文章

  • 详解操作虚拟dom模拟react视图渲染

    详解操作虚拟dom模拟react视图渲染

    这篇文章主要介绍了详解操作虚拟dom模拟react视图渲染,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 详解如何在Remix 中使用 tailwindcss

    详解如何在Remix 中使用 tailwindcss

    这篇文章主要为大家介绍了如何在Remix中使用tailwindcss方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 记录一次完整的react hooks实践

    记录一次完整的react hooks实践

    这篇文章主要介绍了记录一次完整的react hooks实践,通过一个简单示例,介绍了react hooks,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • react的hooks的用法详解

    react的hooks的用法详解

    这篇文章主要介绍了react的hooks的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • React 组件转 Vue 组件的命令写法

    React 组件转 Vue 组件的命令写法

    本文先介绍两个框架的组件共性和不兼容的地方,再介绍react-to-vue的使用和原理,需要的朋友可以参考下
    2018-02-02
  • 路由react-router-dom的基本使用教程

    路由react-router-dom的基本使用教程

    在React中,路由是一套映射规则,是URL路径与组件的对应关系。使用React路由,就是配置路径和组件的对应关系,这篇文章主要介绍了路由react-router-dom的使用,需要的朋友可以参考下
    2023-02-02
  • react项目中如何引入国际化

    react项目中如何引入国际化

    在React项目中引入国际化可以使用第三方库来实现,本文主要介绍了react项目中如何引入国际化,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • react.js框架Redux基础案例详解

    react.js框架Redux基础案例详解

    这篇文章主要介绍了react.js框架Redux基础案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • React中DOM事件和状态介绍

    React中DOM事件和状态介绍

    这篇文章主要介绍了React中DOM事件和状态介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-08-08
  • React实现翻页时钟的代码示例

    React实现翻页时钟的代码示例

    本文给大家介绍了React实现翻页时钟的代码示例,翻页时钟把数字分为上下两部分,翻页效果的实现需要通过设置 position 把所有的数组放在同一个位置叠加起来,文中有详细的代码讲解,需要的朋友可以参考下
    2023-08-08

最新评论