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

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

Jetpack Compose Doc 읽기 — Part1[기초]

derivedStateOf


fun <T> derivedStateOf(
    calculation: () -> T,
): State<T> = DerivedSnapshotState(calculation, null)

여러개의 State 변경을 trigger 삼아 자신의 State를 변경할 수 있다.

derivedStateOf 는 trigger 조건으로 사용할 key들을 인수로 받아서 해당 key 값이 변경되면, derivedStateOf 로 감싸진 block을 처리한후 상태를 변경한다.

derivedStateOf 사용 예시)

@Composable
fun TodoList(
    highPriorityKeywords: List<String> = listOf("Review", "Unblock", "Compose")
) {
    val todoTasks = remember { mutableStateListOf<String>() }

    // todoTasks 또는 highPriorityKeywords가 변경될 때만
    // highPriorityTasks의 계산을 시작합니다.
    // 모든 recomposition이 작동하진 않습니다.
    val highPriorityTasks by remember(todoTasks, highPriorityKeywords) {
        
				// todoTasks 와 highPriorityKeywords 의 변경감지를 한곳에 모아서 처리하는 로직이
				// RxJava의 merge , MediatorLiveData 와 매우 유사하다.
				derivedStateOf {
						// OnChange 이벤트 핸들러. 두 State의 변경감지를 여기서 수행한다.
            todoTasks.filter { it.containsWord(highPriorityKeywords) }
        }
    }

    Box(Modifier.fillMaxSize()) {
        LazyColumn {
						//highPriorityTasks가 변경되었으므로, item 은 재구성된다.
            items(highPriorityTasks) { /* ... */ }
            items(todoTasks) { /* ... */ }
        }
    }
}