React Native error: Element type is invalid: expected a string or a class/function but got: object

JavascriptAndroidReactjsReact Native

Javascript Problem Overview


I am getting this error and I am having a lot of trouble fixing this.

What I am trying to do here is have 3 different screens and have a tabbar that navigates to each screen.

Here is my index:

import React, { Component } from 'react';
import { AppRegistry, Navigator, StyleSheet, View, Text } from 'react-native';

import Nav from './app/components/Nav';
import Screen from './app/Screen';

import Tabs from 'react-native-tabs'

import SwitchView from './SwitchView';

class Proj extends Component {

constructor(props){
	super(props);
}

render(){
	var x = "FeedView";
	return(
		
		  <View style={styles.container}>
	        <Tabs selected={x} style={{backgroundColor:'white'}}
	              selectedStyle={{color:'red'}} onSelect={el=> {x = el.props.name}}>
	            <Text name="FeedView">First</Text>
	            <Text name="WikiView" selectedIconStyle={{borderTopWidth:2,borderTopColor:'red'}}>Second</Text>
	            <Text name="BoardView">Third</Text>
	        </Tabs>
       		
   			<SwitchView id={x}/>
 		         
	      </View>
	);
}
}

const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
})

AppRegistry.registerComponent('Proj', () => Proj);

here is my SwitchView:

import Feed from './app/pages/Feed/Feed';
import Board from './app/pages/Board';
import Wiki from './app/pages/Wiki';

class SwitchView extends Component {
render(){
	var { id } = this.props;

	switch (id) {
		case "FeedView":
			return <Feed/>
		case "WikiView":
			return <Wiki/>
		case "BoardView":
			return <Board/>
	}
}
}

Javascript Solutions


Solution 1 - Javascript

This is probably caused by some JS module export/import issues in your program, typically for one of the two reasons listed below:

  • You forget to export, or you export something incorrectly
  • You import something that doesn't exist, or you import something incorrectly

I ran into similar error, but in my case, it is not caused by export but caused by import, and I used the import statement incorrectly to import something that doesn't exist in the module.

In my case, the import was incorrectly written as:

import { MyComponent } from './MyComponents/MyComponent'

while actually it should be:

import MyComponent from './MyComponents/MyComponent'

And it drove me crazy and took me a whole day to figure it out and I hope this will save several hours for some people.

Solution 2 - Javascript

Change your SwitchView definition to

export default class SwitchView extends Component...

Solution 3 - Javascript

Modify your SwitchView to this:

import Feed from './app/pages/Feed/Feed';
import Board from './app/pages/Board';
import Wiki from './app/pages/Wiki';
export default class SwitchView extends Component {
render(){
    var { id } = this.props;

    switch (id) {
        case "FeedView":
            return <Feed/>
        case "WikiView":
            return <Wiki/>
        case "BoardView":
            return <Board/>
    }
}
}

Solution 4 - Javascript

I faced this issue only for the packages installed. Previously I wrote as

import WebView from 'react-native-webview-messaging/WebView';

I changed to

import { WebView } from 'react-native-webview-messaging/WebView';

Solution 5 - Javascript

In my vase I was on react-native 0.46.4 and had something like import MainContainer from './app' where the app directory had a shared index.js file amongst Android and iOS, but React Native wasn't detecting an index.js inside app. Once I switched to import MainContainer from './app/index.js' it worked.

Solution 6 - Javascript

this error can be resolved by using Defualt

instead of export use export default

Solution 7 - Javascript

In my case, the problem was with incorrectly npm installation of 'AppLoading'. I got error "Component Exception: Element type is invalid" while using react-navigation. There was advice statement below this error to check the render method of 'App'. I had not installed 'AppLoading' properly. I then install it as:

expo install expo-app-loading

and then changed app loading import to

import AppLoading from "expo-app-loading";

[note: make sure that your <AppLoading /> should contain onError prop]. Making these simple changes my app started working as expected.

Solution 8 - Javascript

In my case the error gets fixed by checking the versions of react-navigation and react-navigation/drawer

I was having the @react-navigation version 5 and having the @react-navigation/drawer version 6 and this was causing the issue.

I removed the version 6 and then installed the @react-navigation/drawer version 5 and the issue was fixed

Solution 9 - Javascript

I was facing the same problem I have to update all my navigation/stack and drawer to be on the latest versions all of them

Solution 10 - Javascript

How is that different from module.exports = SwitchView?

For me module.exports works for all of my js files except one.

Solution 11 - Javascript

This is probably caused by some JS module export/import issues in your program, typically for one of the two reasons listed below:

  1. You forget to export or you export something incorrectly
  2. You import something that doesn't exist or you import something incorrectly

I ran into similar error, but in my case it was not caused by export, but rather import. I used the import statement incorrectly to import something that doesn't exist in the module.

Solution 12 - Javascript

This error comes when you are trying to access a component which is not exported. In my case, I forgot to export a component and I was accessing it.

Solution 13 - Javascript

I faced this issue when i wrote :

import {ErrorMessage} from '../Components/ErrorMessage';

instead of writing like this :

import ErrorMessage from '../Components/ErrorMessage';

Solution 14 - Javascript

In my case I had replaced

const App: () => React$Node = () => {

in app.js this line with

const App = () => {

and it's worked for me.

Solution 15 - Javascript

I faced this issue

import Something from '@library';

Just changed to

import { Something } from '@library';

and vice verse

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionParkicismView Question on Stackoverflow
Solution 1 - JavascriptnybonView Answer on Stackoverflow
Solution 2 - JavascriptRaj RView Answer on Stackoverflow
Solution 3 - Javascripttv3freeView Answer on Stackoverflow
Solution 4 - JavascriptSujitView Answer on Stackoverflow
Solution 5 - JavascripturubuzView Answer on Stackoverflow
Solution 6 - JavascriptUmer AftabView Answer on Stackoverflow
Solution 7 - JavascriptUdayanBKambleView Answer on Stackoverflow
Solution 8 - JavascriptAbid AliView Answer on Stackoverflow
Solution 9 - JavascriptJoseph OwigoView Answer on Stackoverflow
Solution 10 - JavascriptchibeepatagView Answer on Stackoverflow
Solution 11 - JavascriptNajathiView Answer on Stackoverflow
Solution 12 - JavascriptAbhiView Answer on Stackoverflow
Solution 13 - JavascriptNitin PatelView Answer on Stackoverflow
Solution 14 - JavascriptjavedView Answer on Stackoverflow
Solution 15 - JavascriptRavi MareboinaView Answer on Stackoverflow