React Native 앱에서 로그아웃 기능 구현 중 다음과 같은 문제가 발생함:
1. 로그아웃 후 로그인 화면으로 강제 이동이 되지 않는 현상
2. Navigation.reset() 사용 시 다음과 같은 에러 발생:
The action 'RESET' with payload {"index":0,"routes":[{"name":"Login"}]} was not handled by any navigator.
<NavigationContainer>
<Stack.Navigator>
{isLoggedIn ? (
<Stack.Screen name="MainTab" ... />
) : (
<>
<Stack.Screen name="Login" ... />
<Stack.Screen name="Signup" ... />
</>
)}
</Stack.Navigator>
</NavigationContainer>
AsyncStorage의 상태 변경을 통한 화면 전환 구현:
const handleLogout = async () => {
try {
await AsyncStorage.multiRemove([
"isLoggedIn",
"rememberLogin",
"accessToken",
"refreshToken",
]);
await AsyncStorage.setItem("isLoggedIn", "false");
} catch (error) {
console.error("로그아웃 실패:", error);
}
};
useEffect(() => {
const checkLoginStatus = async () => {
const [loginStatus, rememberLogin] = await AsyncStorage.multiGet([
"isLoggedIn",
"rememberLogin",
]);
if (rememberLogin[1] !== "true") {
await AsyncStorage.setItem("isLoggedIn", "false");
setIsLoggedIn(false);
} else {
setIsLoggedIn(loginStatus[1] === "true");
}
};
checkLoginStatus();
}, []);
직접적인 네비게이션 조작 대신 앱의 상태 관리를 통한 화면 전환으로 해결하니 더 안정적이고 예측 가능한 동작을 구현할 수 있었음.
AsyncStorage와 React Navigation을 함께 사용할 때는 조건부 렌더링된 네비게이터의 특성을 잘 이해하고 활용하는 것이 중요함.