Невозможно перейти в другой стек с реагирующей навигацией - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь перейти от экрана (экран «Настройки» к «Auth» в приведенном ниже примере), когда пользователь выходит из системы, используя navigation.navigate('Auth'), но я получаю сообщение об ошибке: «У вас есть экран с именем« Auth » ? "

Я не понимаю, что здесь не так. В реакции-навигации 4 это было возможно.

PS: не стесняйтесь игнорировать маркерную часть.

import React, { useState, useEffect } from 'react';
import { Text, View } from 'react-native';

import AsyncStorage from '@react-native-community/async-storage';

import { NavigationContainer } from '@react-navigation/native';

import { createStackNavigator } from '@react-navigation/stack';

import Login from './src/screens/Login'
import Register from './src/screens/Register'
import Welcome from './src/screens/Welcome'
import Map from './src/screens/Map'
import Shop from './src/screens/Shop'
import OfferConfirmation from './src/screens/OfferConfirmation'
import Settings from './src/screens/Settings'



const AuthStack = createStackNavigator()
const AuthStackScreen = () => (
  <AuthStack.Navigator>
    <AuthStack.Screen name="Login" component={Login} />
    <AuthStack.Screen name="Register" component={Register} />
  </AuthStack.Navigator>
)

const MainStack = createStackNavigator()
const MainStackScreen = () => (
  <MainStack.Navigator>
    <MainStack.Screen
      name="Map" component={Map}
    />
    <MainStack.Screen name="Shop" component={Shop} />
    <MainStack.Screen name="OfferConfirmation" component={OfferConfirmation} />
    <MainStack.Screen name="Settings" component={Settings} />
  </MainStack.Navigator>
)

const Stack = createStackNavigator();

export default () => {

  const [token, setToken] = useState(null)

  return (
   <NavigationContainer>
    <Stack.Navigator>

      {token ?
        <Stack.Screen name="Main" component={MainStackScreen} />
      :
        <Stack.Screen name="Auth" component={AuthStackScreen} />
      }

    </Stack.Navigator>
   </NavigationContainer>
  );
};

1 Ответ

1 голос
/ 22 марта 2020

PS: не стесняйтесь игнорировать часть токена.

Это важная часть. Вы определяете экран Main при наличии токена и Auth при отсутствии токена. Если токен присутствует, у вас есть один экран с именем Main, экран Auth не определен. Таким образом, вы не можете перейти к нему. Точно так же, когда токена нет, появляется только экран Auth, поэтому вы не можете перейти к Main.

, когда пользователь выходит из системы, используя navigation.navigate('Auth')

Когда пользователь выходит из системы, вы не должны вручную navigate до Auth. Вместо этого вы должны просто удалить токен (setToken(null)). Тогда React Navigation автоматически покажет экран Auth, поскольку вы определили его, когда токен null.

Подробнее в https://reactnavigation.org/docs/auth-flow

...