У меня есть экран входа, который я поместил в стек. После успешного входа в систему пользователь перенаправляется на домашний экран, который является экраном ящика. Одним из вариантов экрана ящика является выход из системы, поэтому при нажатии на него пользователь должен выйти из системы. Ниже приведен мой код для экрана выхода из системы. Я просто показываю индикатор выполнения на экране выхода из системы в пользовательском интерфейсе, но в useEffect
ловушке, я вызываю следующий код
navigation.reset({
routes: [{name: LOGIN_SCREEN}],
});
Я также попытался вызвать вышеупомянутый метод в useLayoutEffect
, но затем кнопка выхода из системы просто зависает.
Мой стек навигации выглядит следующим образом
<Stack.Navigator>
<Stack.Screen
name={LOGIN_SCREEN}
component={LoginScreen}
options={{headerShown: false}}
/>
<Stack.Screen
name={HOME_STACK_SCREEN}
component={DrawerStack}
options={{headerShown: false}}
/>
// ...
</Stack.Navigator>
Мой компонент ящика выглядит следующим образом
<Drawer.Navigator
drawerStyle={{backgroundColor: BLUE_COLOR_1}}
drawerContentOptions={{labelStyle: {color: '#FFF'}}}
>
<Drawer.Screen
name={HOME_SCREEN}
component={Home}
options={{
// ...
}}
/>
<Drawer.Screen
name={LOGOUT_SCREEN}
component={Logout}
options={{
// ...
}}
/>
// ...
</Drawer.Navigator>
Ниже указан мой компонент выхода из системы
const Logout = ({navigation}) => {
async function logout() {
try {
await AsyncStorage.clear();
navigation.reset({
index: 0,
routes: [{name: LOGIN_SCREEN}],
});
} catch (e) {
Alert.alert(e.toString());
console.log(e.toString());
}
}
useEffect(() => {
logout();
}, []);
return <ProgressBar />;
};