LaunchedEffect


LaunchedEffect: suspend 함수를 Composable 내부에서 호출할수 있게 해준다.

**LaunchedEffect**는 key 라고 불리는 기준값을 두어서 key가 바뀔 때만 LaunchedEffect 의 suspend fun 을 취소하고 재실행한다.

LaunchdEffectSuspend 수명주기는 다음과 같다.

실행시점 종료시점 재실행 Tigger 조건
Compostion enter Composition leave 파라미터의 key 값 변경

Scaffold의 SnackbarHostState.sohwSnacbak() suspend 함수를 실행하여 snackbar 를 띄우는 예제

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MyScreen(mainViewModel: MainViewModel = viewModel()) {
    val snackBarHostState = remember { SnackbarHostState() }

    val isError by mainViewModel.error.observeAsState(false)
		//isError 변수

    if(isError) {
        //isError 변수를 LaunchedEffect 의 key로 설정
        LaunchedEffect(isError) {
						//이 블록은 isError 가 바뀔때마다 취소되고 재수행된다.

            try {
                snackBarHostState.showSnackbar(
                    message = "Error message",
                    actionLabel = "Retry message"
                )
            } catch (e: CancellationException) {
                Log.e("composeTest", "canceled!!")
            }
        }
    }
    
    Scaffold(snackbarHost = { SnackbarHost(snackBarHostState) }) {
        Box(modifier = Modifier.padding(it)) {
            MainScreen()
        }
    }
}