前提・実現したいこと
ReactNativeでcreateMaterialTopTabNavigatorでタブのある画面遷移に加えてcreateStackNavigatorでその一つのページににさらにHomescreen.js内のボタンをクリックしてHealthCheck.js画面遷移できるページを作りたい。
試したこと
createStackNavigatorでHomeとCheckのページを遷移できるようにMainStackで定義し、function MyTabsのcomponentにMainStackを入れましたが実現できませんでした。
App.js↓
App
1import React from 'react'; 2import SettingScreen from './src/SettingScreen'; 3import EditScreen from './src/EditScreen'; 4import HomeScreen from './src/HomeScreen'; 5import Weather from './src/Weather'; 6import HealthCheck from './src/HealthCheck'; 7import { NavigationContainer } from '@react-navigation/native'; 8import 'react-native-gesture-handler'; 9import { MaterialCommunityIcons } from '@expo/vector-icons'; 10import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs'; 11import { FontAwesome5 } from '@expo/vector-icons'; 12import {createStackNavigator} from 'react-navigation-stack'; 13 14 15const MainStack = createStackNavigator( 16 { 17 Home: HomeScreen, 18 Check: HealthCheck, 19 } 20) 21 22const Tab = createMaterialTopTabNavigator(); 23 24 25function MyTabs() { 26 return ( 27 <Tab.Navigator tabBarPosition='bottom' 28 tabBarOptions={{ 29 style: { backgroundColor: '#FFDBC9' }, 30 showIcon:'true', 31 }}> 32 <Tab.Screen name="ホーム" component={MainStack} 33 options={{ 34 tabBarLabel:'ホーム', 35 tabBarIcon:() => (<MaterialCommunityIcons name="home-heart" size={28} color="black" />) 36 }} 37 /> 38 39 <Tab.Screen name="記録" component={SettingScreen} 40 options={{ 41 tabBarLabel:'記録', 42 tabBarIcon:() => (<FontAwesome5 name="pencil-alt" size={21} color="black" />) 43 }} 44 /> 45 46 <Tab.Screen name="お天気" component={Weather} 47 options={{ 48 tabBarLabel:'お天気', 49 tabBarIcon:() => (<MaterialCommunityIcons name="white-balance-sunny" size={24} color="black" />) 50 }} 51 /> 52 53 <Tab.Screen name="ニュース" component={EditScreen} 54 options={{ 55 tabBarLabel:'ニュース', 56 tabBarIcon:() => (<FontAwesome5 name="newspaper" size={24} color="black" />) 57 }} 58 /> 59 </Tab.Navigator> 60 ); 61} 62 63export default function App() { 64 return ( 65 <NavigationContainer > 66 <MyTabs /> 67 </NavigationContainer> 68 69 70 ); 71} 72 73 74
HomeScreen.js↓
HomeScreen
1import React from 'react'; 2import { ImageBackground,StyleSheet, Text, Image, Button} from 'react-native'; 3import { StatusBar } from 'expo-status-bar'; 4 5 6 7class HomeScreen extends React.Component { 8 9 render() { 10 return( 11 <ImageBackground source={require('../image/header.png')} style={styles.imageBackground}> 12 13 <StatusBar style="auto" /> 14 15 <Text style={styles.text}>楽しくダイエットしましょう♪</Text> 16 <Image 17 source={require('../image/kasamotteikinasai1.png')} 18 style={styles.image} 19 /> 20 21 <Button title='GoTo Stack2' onPress={() => this.props.navigation.navigate('Check')}/> 22 23 24 </ImageBackground> 25 26 27 28 ); 29 } 30} 31 32 33const styles = StyleSheet.create({ 34 text: { 35 alignItems: 'center', 36 justifyContent: 'center', 37 textAlign:'center', 38 fontSize:20, 39 fontWeight:'bold', 40 color:'#663333', 41 marginLeft:18, 42 marginRight:0, 43 44 }, 45 46 imageBackground: { 47 flex: 1, 48 resizeMode: "cover", 49 justifyContent: "center", 50 marginLeft:10, 51 marginRight:34, 52 }, 53 54 image: { 55 height: 200, 56 width: 250, 57 marginLeft:50, 58 59 }, 60 61 }); 62 63 64 65export default HomeScreen;
今はタブが下部にあるページができておりますが、HomeScreenのButtonを押してもHealthCheck.jsに遷移せず、「TypeError:undefined is not an object (evaluating 'state.routes')」のエラーが出てしまいます。お手数ですが、ご確認いただけますでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。