質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

Q&A

1回答

2970閲覧

ReactNativeで画面遷移の組み合わせができない

pokkun

総合スコア11

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

0グッド

0クリップ

投稿2020/07/13 08:21

前提・実現したいこと
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')」のエラーが出てしまいます。お手数ですが、ご確認いただけますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

公式サイトだとこのあたりでしょうか?

diff

1- <Button title='GoTo Stack2' onPress={() => this.props.navigation.navigate('Check')}/> 2+ <Button title='GoTo Stack2' onPress={() => this.props.navigation.navigate('ホーム', { screen: 'Check' })}/> 3

(タブの名前は日本語ではない方が良いかもしれません。)

投稿2020/08/20 11:33

編集2020/08/22 19:29
nabehide

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問