React-native、npm、expo。 IOS模拟器。
我收到此错误,但不知道为什么..
警告:React.createElement:类型无效——需要字符串(对于内置组件)或类/函数(对于复合组件)但得到:未定义。您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。
在 App.js:23 检查您的代码。
in App (created by ExpoRoot)
in ExpoRoot (at renderApplication.js:45)
in RCTView (at View.js:34)
in View (at AppContainer.js:106)
in DevAppContainer (at AppContainer.js:121)
in RCTView (at View.js:34)
in View (at AppContainer.js:132)
in AppContainer (at renderApplication.js:39)
在_captureConsoleStackTrace 中的 node_modules/expo/build/logs/LogSerialization.js:155:14 在 node_modules/expo/build/logs/LogSerialization.js:41:26 in serializeLogDataAsync
App.js:
import * as Font from 'expo-font';
import { AppLoading } from 'expo';
import { enableScreens } from 'react-native-screens';
import MealsNavigator from './navigation/MealsNavigator';
enableScreens();
const fetchFonts = () => {
return Font.loadAsync({
'open-sans': require('./assets/fonts/OpenSans-Regular.ttf'),
'open-sans-bold': require('./assets/fonts/OpenSans-Bold.ttf')
});
};
function App() {
const [fontLoaded, setFontLoaded] = useState(false);
if (!fontLoaded) {
return (
<AppLoading
startAsync={fetchFonts}
onFinish={() => setFontLoaded(true)}
onError={console.warn}
/>
);
}
return <MealsNavigator />;
}
export default App;
MealsNavigator:
import React from 'react';
import { Platform, Text } from 'react-native';
import {
createStackNavigator,
createBottomTabNavigator,
createAppContainer,
createDrawerNavigator
} from 'react-navigation';
import { Ionicons } from '@expo/vector-icons';
import { createMaterialBottomTabNavigator } from 'react-navigation-material-bottom-tabs';
import CategoriesScreen from '../screens/CategoriesScreen';
import CategoryMealsScreen from '../screens/CategoryMealsScreen';
import MealDetailScreen from '../screens/MealDetailScreen';
import FavoritesScreen from '../screens/FavoritesScreen';
import FiltersScreen from '../screens/FiltersScreen';
import Colors from '../constants/Colors';
const defaultStackNavOptions = {
headerStyle: {
backgroundColor: Platform.OS === 'android' ? Colors.primaryColor : ''
},
headerTitleStyle: {
fontFamily: 'open-sans-bold'
},
headerBackTitleStyle: {
fontFamily: 'open-sans'
},
headerTintColor: Platform.OS === 'android' ? 'white' : Colors.primaryColor,
headerTitle: 'A Screen'
};
const MealsNavigator = createStackNavigator(
{
Categories: {
screen: CategoriesScreen
},
CategoryMeals: {
screen: CategoryMealsScreen
},
MealDetail: MealDetailScreen
},
{
// initialRouteName: 'Categories',
defaultNavigationOptions: defaultStackNavOptions
}
);
const FavNavigator = createStackNavigator(
{
Favorites: FavoritesScreen,
MealDetail: MealDetailScreen
},
{
// initialRouteName: 'Categories',
defaultNavigationOptions: defaultStackNavOptions
}
);
const tabScreenConfig = {
Meals: {
screen: MealsNavigator,
navigationOptions: {
tabBarIcon: tabInfo => {
return (
<Ionicons name="ios-restaurant" size={25} color={tabInfo.tintColor} />
);
},
tabBarColor: Colors.primaryColor,
tabBarLabel:
Platform.OS === 'android' ? (
<Text style={{ fontFamily: 'open-sans-bold' }}>Meals</Text>
) : (
'Meals'
)
}
},
Favorites: {
screen: FavNavigator,
navigationOptions: {
tabBarIcon: tabInfo => {
return <Ionicons name="ios-star" size={25} color={tabInfo.tintColor} />;
},
tabBarColor: Colors.accentColor,
tabBarLabel:
Platform.OS === 'android' ? (
<Text style={{ fontFamily: 'open-sans-bold' }}>Favorites</Text>
) : (
'Favorites'
)
}
}
};
const MealsFavTabNavigator =
Platform.OS === 'android'
? createMaterialBottomTabNavigator(tabScreenConfig, {
activeTintColor: 'white',
shifting: true,
barStyle: {
backgroundColor: Colors.primaryColor
}
})
: createBottomTabNavigator(tabScreenConfig, {
tabBarOptions: {
labelStyle: {
fontFamily: 'open-sans'
},
activeTintColor: Colors.accentColor
}
});
const FiltersNavigator = createStackNavigator(
{
Filters: FiltersScreen
},
{
// navigationOptions: {
// drawerLabel: 'Filters!!!!'
// },
defaultNavigationOptions: defaultStackNavOptions
}
);
const MainNavigator = createDrawerNavigator(
{
MealsFavs: {
screen: MealsFavTabNavigator,
navigationOptions: {
drawerLabel: 'Meals'
}
},
Filters: FiltersNavigator
},
{
contentOptions: {
activeTintColor: Colors.accentColor,
labelStyle: {
fontFamily: 'open-sans-bold'
}
}
}
);
export default createAppContainer(MainNavigator);