SideEffect

박채빈·2024년 1월 25일
0

AndroidStudy

목록 보기
18/19
post-thumbnail

SideEffect

LaunchedEffect

컴포저블의 범위에서 정지 함수 실행

rememberCoroutineScope

컴포지션 인식 범위를 확보하여 컴포저블 외부에서 코루틴 실행

rememberUpdatedState

값이 변경되는 경우 다시 시작되지 않아야 하는 효과에서 값 참조

DisposableEffect

정리가 필요한 효과
Ex) 파일을 열었다 닫는다. 짝을 맞춰야 하는 동작

SideEffect

Compose 상태를 비 Compose 코드에 게시

produceState

비 Compose 상태를 Compose 상태로 변환

derivedStateOf

하나 이상와 상태 객체를 다른 상태로 변환

snapshotFlow

Compose의 상태를 Flow로 변환


Example

@Composable
fun EffectEx(lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current) {
  val snackBarHostState = remember { SnackbarHostState() }

  // LaunchedEffect를 이용해서 스낵바를 이용
  LaunchedEffect(snackBarHostState) {
    // suspend 함수 쓸수있는 coroutine scope
    snackBarHostState.showSnackbar(message = "Hello Compose")
  }

  // Disposable Effect 호출
  DisposableEffect(key1 = lifecycleOwner) {
    
    // 1. 필요에 따라 어떤 일을 함
    val observer = LifecycleEventObserver { _, event -> // source , event
      when (event) {
        ON_START -> Log.d("Effect", "ON_START")
        ON_STOP -> Log.d("Effect", "ON_STOP")
        else -> Log.d("Effect", "ELSE: ${event.name}")
      }
    }

    lifecycleOwner.lifecycle.addObserver(observer)

    // 2. 이후 정리
    onDispose {
      lifecycleOwner.lifecycle.removeObserver(observer)
    }
  }

  Scaffold(
    snackbarHost = { SnackbarHost(snackBarHostState) }
  ) { innerPadding ->
    Box(modifier = Modifier.padding(innerPadding))
  }
}
profile
안드로이드 개발자

0개의 댓글