Compose의 부수 효과 | Jetpack Compose | Android Developers
Jetpack Compose Doc 읽기 — Part1[기초]
fun <T> derivedStateOf(
calculation: () -> T,
): State<T> = DerivedSnapshotState(calculation, null)
여러개의 State 변경을 trigger 삼아 자신의 State를 변경할 수 있다.
MediatorLiveData
기능과 매우 유사하다.Merge
와도 기능이 유사하다.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) { /* ... */ }
}
}
}