cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menambah dua skrin semasa menavigasi dalam aplikasi React Native, tetapi tidak menunjukkannya dalam TabBar?

<p>Saya memerlukan pendaftaran pengguna dan antara muka log masuk untuk tidak dipaparkan dalam <kod>TabBar</code> Saya mempunyai aplikasi mudah dan saya cuba mempunyai dua jenis antara muka pengguna, satu mod tetamu dan satu mod pengesahan pengguna. Saya mencipta navigasi untuk setiap syarat <kod>pengesahan</kod> untuk memaparkan TabBar bagi setiap keadaan aplikasi, sama ada mod tetamu atau mod pengesahan. Saya juga mempunyai komponen <code>TabBar</code> untuk memaparkan ikon bagi setiap navigasi. </p> <p>Masalah timbul apabila saya mahu menambah skrin <kod>LoginSkrin</kod> dan <kod>Skrin Daftar</kod> </p> <p>Saya cuba mencipta <kod>Navigasi</code> (AuthNavigator) untuk mengurus skrin ini dan akhirnya mendapat akses, tetapi ia muncul pada TabBar, Tetapi ini tidak dibenarkan, skrin ini tidak boleh diakses daripada <code>TabBar</code></p> <p>Saya memerlukannya untuk berada dalam navigasi, tetapi tidak dipaparkan pada <kod>TabBar</code>. </p> <p>Skrin ini tidak ditambahkan dalam fail <code>TabBar</code> jadi <code>Icon</code> <p>Saya cuba menggunakan <code>options={{ tabBarVisible: false }}</code> <p>Juga mencuba <code>display = "none"</code> </p> <p>Saya mencari penyelesaian di Google tetapi tidak menemui apa-apa. </p> <p>Saya ingin menunjukkan sistem navigasi saya untuk membimbing saya tentang kesalahan yang saya lakukan dan cara membetulkan kesilapan saya.</p> <p>--------- App.js ---------</p> <pre class="brush:php;toolbar:false;">import React daripada 'react' import { NavigationContainer } daripada '@react-navigation/native' import GuestNavigator daripada './navigation/GuestNavigator' import AppNavigator daripada './navigation/AppNavigator' const App = () => { const isUserAuthenticated = palsu; kembali ( <Bekas Navigasi> {isUserAuthenticated ? ( <AppNavigator /> ) : ( <GuestNavigator /> )} </NavigationContainer> ) } eksport lalai App</pre> <p><strong>---这是访客模式的导航---</strong></p> <p>---- GuestNavigator.JS -------</p> <pre class="brush:php;toolbar:false;">import { createBottomTabNavigator } daripada '@react-navigation/bottom-tabs'; import TabBar daripada '../components/TabBar'; const Tab = createBottomTabNavigator(); const GuestNavigator = ({ handleLogin }) => { kembali ( <Tab.Navigator tabBar={props => <Bar Tab {...props} />}> <Tab.Screen name="Home" component={HomeScreen} /> <Tab.Screen name="SampleNotas" component={SampleNotasScreen} /> <Tab.Screen name="SampleCuras" component={SampleCurasScreen} /> <Tab.Screen name="SamplePerfil" component={SamplePerfilScreen} /> <Skrin Tab name="Log Masuk" options={{ tabBarVisible: false }} kanak-kanak={() => <LoginScreen handleLogin={handleLogin} />} /> </Tab.Navigator> ); }; eksport lalai GuestNavigator;</pre> <p><em><strong>--这是认证模式的导航--</strong></em></p> <p>------ AppNavigator.JS ---------</p> <pre class="brush:php;toolbar:false;">import { createBottomTabNavigator } daripada '@react-navigation/bottom-tabs'; import TabBar daripada '../components/TabBar'; const Tab = createBottomTabNavigator(); const AppNavigator = () => { kembali ( <Tab.Navigator tabBar={props => <Bar Tab {...props} />}> <Tab.Screen name="Notas" component={NotasScreen} /> <Tab.Screen name="CrearNota" component={CrearNotaScreen} options={{ tabBarVisible: false }} /> <Tab.Screen name="Curas" component={CurasScreen} /> <Tab.Screen name="Recordatorios" component={RecordatoriosScreen}/> <Tab.Screen name="Profile" component={ProfileScreen} /> <Tab.Screen name="EditProfile" component={EditarProfileScreen} options={{ tabBarVisible: false }} /> </Tab.Navigator> ); }; eksport lalai AppNavigator</pre> <p>我还为登录和注册创建了一个导航系统</p> <p>------- AuthNavigator.js ----------</p> <pre class="brush:php;toolbar:false;">import React daripada 'react' import { NavigationContainer } daripada '@react-navigation/native' import { createStackNavigator } daripada '@react-navigation/stack' import Skrin Masuk daripada '../screens/AuthScreens/LoginScreen' import RegisterScreen daripada '../screens/AuthScreens/RegisterScreen' const Stack = createStackNavigator() const AuthNavigator = () => { kembali ( <Bekas Navigasi> <Timbunan.Navigator> <Timbunan.Skrin name="Log Masuk" component={LoginScreen} pilihan={{ headerShown: palsu, }} /> <Timbunan.Skrin name="Daftar" component={RegisterScreen} pilihan={{ tajuk: 'Registro', }} /> </Stack.Navigator> </NavigationContainer> ) } eksport lalai AuthNavigator</pre> <p>当然,如果我从GuestNavigator导航中删除Skrin Log Masuk,我会得到错误:</p> <p><strong>错误:未处理任何导航器的负载为{"name":"Log Masuk"}的动作'NAVIGATE'。 是否有名为'Login'的屏幕? 如果您尝试导航到嵌套导航器中的屏幕,请参阅https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested. 这只是一个开发时的警告,不会在生产中显示。</strong></p> <p>我还显示了TabBar,尽管它显示了图标,但这些屏幕没有添加。----- TabBar.js -----------</p> <pra><kod>import React daripada 'react'; import { View, TouchableOpacity, Text } daripada 'react-native'; import Ikon daripada 'react-native-vector-icons/Ionicons'; const TabBar = ({ state, deskriptor, navigation, isUserAuthenticated }) => { kembali ( <Lihat gaya={{ flexDirection: 'row', ketinggian: 60, backgroundColor: '#F3F9F5' }}> {state.routes.map((laluan, indeks) => { const { pilihan } = deskriptor[route.key]; const onPress = () => { acara const = navigation.emit({ taip: 'tabPress', sasaran: route.key, }); jika (!event.defaultPrevented) { navigation.navigate(route.name); } }; const isFocused = state.index === indeks; warna const = isFokus ? '#08A438' : 'hitam'; biarkan iconName; jika (!isUserAuthenticated) { // Iconos for el modo invitado if (route.name === 'Home') { iconName = 'rumah'; } else if (route.name === 'SampleNotas') { iconName = 'senarai'; } else if (route.name === 'SampleCuras') { iconName = 'medkit'; } else if (route.name === 'SamplePerfil') { iconName = 'orang'; } } lain { // Iconos para el modo autenticado if (route.name === 'Notas') { iconName = 'nota'; } else if (route.name === 'Curas') { iconName = 'medkit'; } else if (route.name === 'Recordatorios') { iconName = 'penggera'; } else if (route.name === 'Profil') { iconName = 'orang'; } } kembali ( <TouchableOpacity kunci={indeks} onPress={onPress} style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }} > <</code></pra>
P粉155551728P粉155551728461 hari yang lalu677

membalas semua(1)saya akan balas

  • P粉014218124

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

    Untuk membetulkannya, tambahkan Guestnavigator pada AuthNavigator seperti ini:

    const AuthNavigator = ({}) => {
      return (
        <Stack.Navigator>
          <Stack.Screen name="GuestStack" component={GuestNavigator}/>
          <Stack.Screen name="Login" component={LoginScreen}/>
          <Stack.Screen name="Register" component={RegisterScreen}/>
       </Stack.Navigator>
      );
    };

    Refactor App.js kepada:

    const App = () => {    
      return (
        <NavigationContainer>
          {isAuth ? <AuthNavigator /> : <AppNavigator />}
        </NavigationContainer>
      )
    }

    Dan jangan lupa untuk mengalih keluar tab log masuk daripada GuestNavigator.

    balas
    0
  • Batalbalas