[解決済み] react-navigation v5を使ったreact-nativeアプリのAppNavigatorの構文を更新する。
2022-02-26 10:05:23
質問
react-nativeアプリで、react-navigation v5にアップグレードしている最中です。その際
AppNavigator
は、私のメインのApp.jsファイルに渡され、古いコードは次のようになります。
import { createAppContainer, createSwitchNavigator, createStackNavigator } from 'react-navigation';
import LoginScreen from '../screens/LoginScreen';
import LoadingScreen from '../screens/LoadingScreen';
const AuthStack = createStackNavigator({
Login: LoginScreen,
Loading: LoadingScreen
});
import MainDrawerNavigator from './DrawerNavigator';
export default createAppContainer(createSwitchNavigator({
Main: MainDrawerNavigator,
Auth: AuthStack
},
{
initialRouteName: 'Auth',
}));
このコードは、App.jsの中で次のように使われる。
<Provider store={store}>
<NavigationContainer ref={navigationRef}>
<View style={styles.container}>
{Platform.OS === 'ios' && <StatusBar barStyle="light-content" />}
<AppNavigator ref={nav => { navigatorRef = nav }} /> // AppNavigator used here
</View>
</NavigationContainer>
</Provider>
私の知る限りでは
createAppContainer
は、react-navigation v5でこれを処理する方法でなくなりました。 私は特にこのインポートでエラーが出ています。
import { createAppContainer, createSwitchNavigator, createStackNavigator } from 'react-navigation';
... この種のインポートの場所に関するディレクトリ構造が変更されたことも理由の一つです。しかし、私の知る限りでは
createAppContainer
は今は存在しないのですか?つまり、今は別の場所にあるという問題だけではないのです。間違っていたら訂正してください。
そこで質問なのですが、このコードはv5ではどのような形になるのでしょうか?どんな洞察でもかまいません。私はこれを参照しています
AppNavigator
のコードを使用します。
import { createAppContainer, createSwitchNavigator, createStackNavigator } from 'react-navigation';
import LoginScreen from '../screens/LoginScreen';
import LoadingScreen from '../screens/LoadingScreen';
const AuthStack = createStackNavigator({
Login: LoginScreen,
Loading: LoadingScreen
});
import MainDrawerNavigator from './DrawerNavigator';
export default createAppContainer(createSwitchNavigator({
Main: MainDrawerNavigator,
Auth: AuthStack
},
{
initialRouteName: 'Auth',
}));
解決方法は?
まず最初に、すべてのナビゲーションを格納するためにNavigationContainerをインポートする必要があります。
import { NavigationContainer } from '@react-navigation/native'
その後、次のようにStackNavigatorを作成します。
import { createStackNavigator } from '@react-navigation/stack'
const Stack = createStackNavigator()
import LoginScreen from '../screens/LoginScreen'
import LoadingScreen from '../screens/LoadingScreen'
function AuthStack() {
return (
<Stack.Navigator>
<Stack.Screen
name = "LoginScreen"
component = {LoginScreen}
/>
<Stack.Screen
name = "LoadingScreen"
component = {LoadingScreen}
/>
</Stack.Navigator>
)
}
次に、ドロワーナビゲータを作成します。
import { createDrawerNavigator } from '@react-navigation/drawer'
const MainDrawer = createDrawerNavigator()
最後に、Appの関数は次のようになります。
import { NavigationContainer } from '@react-navigation/native'
import { createStackNavigator } from '@react-navigation/stack'
import { createDrawerNavigator } from '@react-navigation/drawer'
const Stack = createStackNavigator()
import LoginScreen from '../screens/LoginScreen'
import LoadingScreen from '../screens/LoadingScreen'
function AuthStack() {
return (
<Stack.Navigator>
<Stack.Screen
name = "LoginScreen"
component = {LoginScreen}
/>
<Stack.Screen
name = "LoadingScreen"
component = {LoadingScreen}
/>
</Stack.Navigator>
)
}
const MainDrawer = createDrawerNavigator()
export default function App() {
return (
<NavigationContainer>
<MainDrawer.Navigator
initialRouteName = "Auth"
>
<MainDrawer.Screen
name = 'Auth'
component = {AuthStack}
/>
<MainDrawer.Screen
name = 'YourDrawerScreen'
component = {YourDrawerScreen}
/>
</MainDrawer.Navigator>
</NavigationContainer>
)
}
React-Navigation v5にはSwitch Navigatorがないと思うのですが。
関連
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] 'Proptypes'が定義されていない
-
[解決済み] ReactJS - SCRIPT1010: 期待される識別子 - IE11 で本番ビルドが実行されない
-
[解決済み] axios-mock-adapter onGet mock data not effective.
-
[解決済み] は、gatsby-imageで動作する良いreactのカルーセルコンポーネントはありますか?[って聞かれます。]
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] React / React Nativeでコンストラクタを使用する場合とgetInitialStateを使用する場合の違いとは何ですか?
-
[解決済み] react-nativeでキーボードを隠す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー: 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み] react-router-domを使用する際に「Function components cannot be given refs」を回避するにはどうすればよいですか?
-
[解決済み] バベルエラーです。JSX値は、式または引用されたJSXテキストのいずれかである必要があります。
-
[解決済み] リアクトです。<tr>は<td>の子として表示できません。コメント > td > tr を参照してください。
-
[解決済み] React の open mailto E-Mail クライアントの onClick で textarea から本文を取得する。
-
[解決済み] react.jsでng-ifに相当するものは何ですか?
-
[解決済み] validateDOMNesting警告React
-
[解決済み] nextjsで異なる.envファイルを使用するには?
-
[解決済み] 矢印本体を囲む予期せぬブロックステートメント
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。