안드로이드/개발관련(Kotlin)
Android Compose navigation 사용 시 recomposition 이슈
닉네임못짓는사람
2024. 9. 24. 13:39
반응형
compose navigation과 uiState를 사용해서 A -> B로 이동하는 로직을 구현
B화면이 무한으로 실행되는것을 확인
기존 코드
val uiState = viewModel.uiState.collectAsStateWithLifecycle().value
var errorAlertState by remember { mutableStateOf(ErrorAlertState()) }
when (uiState) {
SplashViewModel.SplashUiState.Loading -> Unit
SplashViewModel.SplashUiState.Loaded -> navigateToList()
is SplashViewModel.SplashUiState.Failed -> errorAlertState = ErrorAlertState(true, uiState.message)
}
원인은 A에서 B로 이동할 때 A가 recomposition되면서 SplashViewModel.SplashUiState.Loaded -> navigateToList() 부분이 실행.
이로인해 무한 루프가 발생한다.
수정 코드
val uiState = viewModel.uiState.collectAsStateWithLifecycle().value
var errorAlertState by remember { mutableStateOf(ErrorAlertState()) }
if (uiState is SplashViewModel.SplashUiState.Failed) errorAlertState = ErrorAlertState(true, uiState.message)
LaunchedEffect(key1 = uiState) {
if (uiState == SplashViewModel.SplashUiState.Loaded) navigateToList()
}
화면 이동 부분을 LuanchedEffect로 따로 빼서 실행
해결됨
반응형