Compose의 부수 효과  |  Jetpack Compose  |  Android Developers

Jetpack Compose Doc 읽기 — Part1[기초]

[Compose] 6. Side-effects - LaunchedEffect, rememberCoroutineScope, rememberUpdatedState, DisposableEffect, SideEffect, produceState, derivedStateOf, snapshotFlow

ProduceState


기존의 방식에서 State를 생성하는 방법은 다음과 같았다.

val counterState = remember { mutableStateOf(0) }

Button(onClick = { counterState.value++ }) {
    Text("You have clicked ${counterState.value} times")
}

mutableStateOf() 로 초기값을 설정할 수 있지만, 좀더 복잡한 로직이 들어가게 되면, State를 생성하는 함수형태로 만들고 State를 반환하도록 해야될수 있다.

produceState는 , 컴포즈 함수의 반환값으로 State<T> 를 반환할 수 있게 한다.

@Composable
fun <T> produceState(
    initialValue: T,
    key1: Any?,
    key2: Any?,
    producer: suspend ProduceStateScope<T>.() -> Unit
): State<T> {
		// result 유지
    val result = remember { mutableStateOf(initialValue) }
    
		// LaucnehdEffect로 producer 블럭 실행
		LaunchedEffect(key1, key2) {
        ProduceStateScopeImpl(result, coroutineContext).producer()
    }
    return result
}