解决React-Native项目由于export,import错误导致的元素类型无效【Element type is invalid】

本文详细解析React Native中组件导入与导出的两种常见方式:export class与export default class的区别,解释了何时使用大括号导入组件,以及何时可以自定义组件名称。通过实例说明如何避免因组件导出不当导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前些日子做项目时有一个报错,虽然解决了,但是对于导致的原因,还是一知半解。今天突然发现一篇博客,大受启发,决定将这个问题系统的总结一下。

报错信息:

在这里插入图片描述
提示元素类型无效,可能是忘记从你定义的文件中导出来组件,或者是你弄混了要导入的组件的默认名字,没有和你导入时的名字相对应。

解决方式:

1:在导出文件中使用export class 组件类名称 extends Component 将组件导出。此时可以在要导入的地方使用 import {组件类名称} from “路径” 进行导入使用。
2:在导出文件类中,使用class 组件类名称 extends Component 对组件类进行定义,并在定义之后使用 export default 组件类名称的方式将组件进行导出。此时可以在要导入的地方使用 import 组件类名称 from “路径” 方式将需要的组件类导入进来。

原因分析:

在初识react-native时就在想为什么每个文件最上面的导入外部组件的方式会有不同

import { View, Text } from "react-native"

import TestCompontent from "../../TestCompontent"

为什么一个带大括号,另一个就不带大括号呢???
第一种方式:
带大括号的表示在导出文件中使用的是export class 组件类名称 extends Component
而我们常见的带大括号引入的组件,都是从一些第三方库中引入的组件文件,例如从react-native中引入的View,Text组件。这些都是固定的组件名字,他是需要查看文档,我想引入一个View,就必须知道在这个第三方库中存在View这个第三方组件,况且一个第三方库中有许许多多的组件,因此必须知道确切的名称才能进行导入,而不能自己随意的起名。
第二种方式:
不带大括号是使用 export default 组件类名称的方式将组件类进行导出。此时一般都是一些自定义的组件,况且在自定义组件中一般一个文件只有一个组件,因此只要import 的来源是正确的,就可以将组件类的名称进行自定义取名 import Test from "../../TestCompontent"
总结:
1:其实上述两种方式的区别主要就是export classexport default class 的区别。使用export default的方式将组件导出时就可以将组件类的名称进行自定义。如果使用export的方式进行自定义,那么就必须按照定义组件类时的名称进行导入。
2:有帮助的博客链接:
https://segmentfault.com/a/1190000018064918?utm_source=tag-newest

BUNDLE ./index.js LOG Running "VisionCameraExample" with {"rootTag":11} LOG Loading react-native-worklets-core... LOG Worklets loaded successfully LOG Re-rendering Navigator. Camera: denied | Microphone: denied ERROR Warning: React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports. Check the render method of `SceneView`. in SceneView (created by NativeStackView) in Suspender (created by Freeze) in Suspense (created by Freeze) in Freeze (created by DelayedFreeze) in DelayedFreeze (created by ScreenStack) in RNSScreenStack (created by ScreenStack) in ScreenStack (created by NativeStackView) in FrameSizeProviderInner (created by FrameSizeProvider) in FrameSizeProvider (created by SafeAreaProviderCompat) in RNCSafeAreaProvider (created by SafeAreaProvider) in SafeAreaProvider (created by SafeAreaProviderCompat) in SafeAreaProviderCompat (created by NativeStackView) in NativeStackView (created by NativeStackNavigator) in PreventRemoveProvider (created by NavigationContent) in NavigationStateListenerProvider (created by NavigationContent) in NavigationContent in Unknown (created by NativeStackNavigator) in NativeStackNavigator (created by App) in RNGestureHandlerRootView (created by GestureHandlerRootView) in GestureHandlerRootView (created by App) in ThemeProvider in EnsureSingleNavigator in BaseNavigationContainer in NavigationContainerInner (created by App) in App in RCTView (created by View) in View (created by AppContainer) in RCTView (created by View) in View (created by AppContainer) in AppContainer in VisionCameraExample(RootComponent) ERROR Warning: Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
最新发布
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值