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>