検索

ホームページ  >  に質問  >  本文

React Native アプリ内を移動するときに 2 つの画面を追加し、TabBar には表示しないようにするにはどうすればよいですか?

<p>ユーザー登録とログイン インターフェイスをアプリケーションの <code>TabBar</code> に表示しないようにする必要があります。 単純なアプリケーションがあり、ゲスト モードとユーザー認証モードの 2 種類のユーザー インターフェイスを用意しようとしています。 各 <code>authentication</code> 条件のナビゲーションを作成し、アプリケーションの各状態 (ゲスト モードまたは認証モード) の TabBar を表示しました。各ナビゲーションのアイコンを表示するための <code>TabBar</code> コンポーネントもあります。 </p> <p><code>LoginScreen</code> および <code>RegisterScreen</code> 画面にアクセスできないため、これらの画面を追加したいときに問題が発生します。 </p> <p>これらの画面を管理するために 3 番目の <code>Navigation</code> (AuthNavigator) を作成しようとしましたが、最終的にアクセスできるようになりましたが、TabBar に表示されます。 しかし、これは許可されていません。これらの画面には <code>TabBar</code></p> からアクセスできません。 <p>それらをナビゲーションに表示する必要がありますが、<code>TabBar</code> には表示されません。 </p> <p>これらの画面は <code>TabBar</code> ファイルには追加されないため、<code>アイコン</code> は表示されませんが、タイトル</p> <p><code>options={{ tabBarVisible: false }}</code> を使用してみましたが、効果はありませんでした</p> <p><code>display = "none"</code> も試しましたが成功しませんでした。 </p> <p>Google で解決策を探しましたが、何も見つかりませんでした。 </p> <p>ナビゲーション システムのデモンストレーションを行って、何が間違っているか、どのように修正するかを説明したいと思います。</p> <p>----------- App.js ---------</p> <pre class="brush:php;toolbar:false;">「react」から React をインポート import { NavigationContainer } から '@react-navigation/native' 「./navigation/GuestNavigator」から GuestNavigator をインポートします 「./navigation/AppNavigator」から AppNavigator をインポートします const App = () => { const isUserAuthenticated = false; 戻る ( <ナビゲーションコンテナ> {ユーザー認証されていますか? ( <AppNavigator /> ):( <ゲストナビゲーター /> )} </NavigationContainer> ) } デフォルトのアプリをエクスポート</pre> <p><strong>---これは访客モードの导航---</strong></p> <p>----GuestNavigator.JS -------</p> <pre class="brush:php;toolbar:false;">import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; TabBar を '../components/TabBar' からインポートします。 const Tab = createBottomTabNavigator(); const GuestNavigator = ({ handleLogin }) => { 戻る ( <Tab.Navigator tabBar={props => <TabBar {...props} />}> <Tab.Screen name="ホーム" コンポーネント={ホームスクリーン} /> <Tab.Screen name="SampleNotas" コンポーネント={SampleNotasScreen} /> <Tab.Screen name="SampleCuras" コンポーネント={SampleCurasScreen} /> <Tab.Screen name="SamplePerfil" コンポーネント={SamplePerfilScreen} /> <タブ画面 名前=「ログイン」 オプション={{ tabBarVisible: false }} 子={() => <ログイン画面 handleLogin={handleLogin} />} /> </Tab.Navigator> ); }; デフォルトの GuestNavigator;</pre> をエクスポートします。 <p><em><strong>--これは认证モードの导航--</strong></em></p> <p>------ AppNavigator.JS ---------</p> <pre class="brush:php;toolbar:false;">import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; TabBar を '../components/TabBar' からインポートします。 const Tab = createBottomTabNavigator(); const AppNavigator = () => { 戻る ( <Tab.Navigator tabBar={props => <TabBar {...props} />}> <Tab.Screen name="Notas" コンポーネント={NotasScreen} /> <Tab.Screen name="CrearNota" コンポーネント={CrearNotaScreen} options={{ tabBarVisible: false }} /> <Tab.Screen name="Curas" コンポーネント={CurasScreen} /> <Tab.Screen name="Recordatorios" コンポーネント={RecordatoriosScreen}/> <Tab.Screen name="プロファイル" コンポーネント={ProfileScreen} /> <Tab.Screen name="EditProfile" コンポーネント={EditarProfileScreen} options={{ tabBarVisible: false }} /> </Tab.Navigator> ); }; デフォルトの AppNavigator</pre> をエクスポートします。 <p>我丘は登录および注册创建了一导系航统</p> <p>------AuthNavigator.js ----------</p> <pre class="brush:php;toolbar:false;">「react」から React をインポート import { NavigationContainer } から '@react-navigation/native' import { createStackNavigator } から '@react-navigation/stack' 「../screens/AuthScreens/LoginScreen」から LoginScreen をインポートします 「../screens/AuthScreens/RegisterScreen」から RegisterScreen をインポートします const Stack = createStackNavigator() const AuthNavigator = () => { 戻る ( <ナビゲーションコンテナ> <スタックナビゲータ> <スタック.スクリーン 名前=「ログイン」 コンポーネント={ログイン画面} オプション={{ headerShow: false、 }} /> <スタック.スクリーン 名前=「登録」 コンポーネント={登録画面} オプション={{ タイトル:「レジストロ」、 }} /> </Stack.Navigator> </NavigationContainer> ) } デフォルトの AuthNavigator</pre> をエクスポートします。 <p>当然、如果我从GuestNavigator导航中删除LoginScrein,我会得错误:</p> <p><strong> 警告: {"name":"Login"} のアクション 'NAVIGATE' は、ナビゲーションツールのダウンロードを処理しません。 「ログイン」の画面が有名ですか? プラグインナビゲーションの画面にナビゲーションする場合は、https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator を参照してください。 これは起動時の警告であり、生成中には表示されません。 <p>TabBar も表示されますが、これらのスクリーンには追加されていません。----- TabBar.js -----------</p> <pre><code>React を 'react' からインポートします。 import { View, TouchableOpacity, Text } from 'react-native'; 「react-native-vector-icons/Ionicons」からアイコンをインポートします。 const TabBar = ({ 状態、記述子、ナビゲーション、isUserAuthenticated }) => { 戻る ( <View style={{ flexDirection: 'row'、高さ: 60、backgroundColor: '#F3F9F5' }}> {state.routes.map((ルート, インデックス) => { const { オプション } = 記述子[ルートキー]; const onPress = () => { const イベント = Navigation.emit({ タイプ: 'tabPress'、 ターゲット: ルート.キー、 }); if (!event.defaultPrevented) { ナビゲーション.ナビゲート(ルート.名); } }; const isFocused = state.index === インデックス; const color = isFocused ? '#08A438' : '黒'; アイコン名を許可します; if (!isUserAuthenticated) { // Iconos para el modo invitado if (route.name === 'ホーム') { iconName = 'ホーム'; } else if (route.name === 'SampleNotas') { iconName = 'リスト'; } else if (route.name === 'SampleCuras') { iconName = 'medkit'; } else if (route.name === 'SamplePerfil') { iconName = '人'; } } それ以外 { // 自動モードのアイコン if (route.name === '注意事項') { iconName = 'メモ'; } else if (route.name === 'Curas') { iconName = 'medkit'; } else if (route.name === 'Recordatorios') { iconName = 'アラーム'; } else if (route.name === 'プロファイル') { iconName = '人'; } } 戻る ( <タッチ可能な不透明度 キー={インデックス} onPress={onPress} style={{ flex: 1、alignItems: 'center'、justifyContent: 'center' }} > <</code></pre>
P粉155551728P粉155551728461日前678

全員に返信(1)返信します

  • P粉014218124

    P粉0142181242023-08-21 09:35:05

    この問題を解決するには、次のように Guestnavigator を AuthNavigator に追加します。

    リーリー

    App.js を次のようにリファクタリングします:

    リーリー

    そして、GuestNavigator からログイン タブを削除することを忘れないでください。

    返事
    0
  • キャンセル返事