Как сбросить навигацию react при «отключении» от вкладки?

#javascript #reactjs #react-native #react-navigation

#javascript #reactjs #react-native #react-навигация

Вопрос:

итак, у меня есть стек AuthStack с таким именем

 const AuthStack = ({ resetPassword, updateEmail }: any) => (
    <Stack.Navigator
        screenOptions={{
            cardStyle: { backgroundColor: '#F2F1F7' },
            headerShown: true,
            headerTitle: '',
        }}
    >
        {resetPassword ? (
            <Stack.Screen name="Reset Password">{(props: any) => <ResetPassword />}</Stack.Screen>
        ) : updateEmail ? (
            <Stack.Screen name="Update Email">{(props: any) => <UpdateEmail />}</Stack.Screen>
        ) : (
            <Stack.Screen name="Home">{(props: any) => <Home />}</Stack.Screen>
        )}
    </Stack.Navigator>
)
  

было бы неплохо узнать, правильно ли это сделать. но, по сути, на странице моей учетной записи у меня есть ссылки для сброса пароля и обновления электронной почты. Я поместил оба этих параметра в AuthStack, поскольку не был уверен, что это лучшее место. в любом случае, это работает, однако, если я нажму «обновить электронную почту» и перейду туда, если я затем решу, что на самом деле хочу перейти на другую страницу и перейти, если я затем вернусь, нажав «Домой», я все равно перейду на страницу обновления электронной почты. хотя на данный момент я действительно хочу показать главный экран. кроме того, если я нажму на home, пока он активен, он не приведет меня туда. это означает, что я больше никогда не смогу увидеть свою домашнюю страницу.

итак, мне было интересно, есть ли какой-то слушатель, который при переходе с этой страницы всегда будет показывать мне Home по умолчанию?

есть идеи? и я не хочу показывать сброс пароля / обновление электронной почты, поскольку есть собственные вкладки, поэтому они скрываются под home. есть ли лучший подход для этого?

Ответ №1:

Я действительно не знаю, почему вы условно отображаете экраны, я думаю, вы неправильно используете name. Вы должны перемещаться как navigation.navigate(‘ForgotPassowrd’) (название экрана). Он продолжает показывать вам обновленную электронную почту, потому что Home не существует.

 export const AuthNavigator = () => {
    return (
        <Stack.Navigator headerMode='none'>
            <Stack.Screen name='Home' component={SignupContainer}></Stack.Screen>
            <Stack.Screen name='ForgotPassword' component={ForgotPasswordContainer}></Stack.Screen>
            <Stack.Screen name='Update Email' component={UpdateEmailContainer}></Stack.Screen>
        </Stack.Navigator>
    );
};