Compose는 선언적이므로 업데이트하는 유일한 방법은 새 argument로 동일한 composable을 호출하는 것 입니다. argument는 UI 상태를 표현하고, 상태가 업데이트 될 때마다 recomposition이 실행됩니다.
composable 함수는 remember
composable을 사용해 메모리에 단일 객체를 저장할 수 있습니다.
remember
를 통해 초기 composition에 저장하고, 저장된 값은 recomposition에 반환됩니다.
mutableStateOf
는 observable한 MutableState<T>
를 생성하고, 이는 Compose 런타임 시 observable한 type으로 통합됩니다.
interface MutableState<T> : State<T> {
override var value: T
}
value
가 변경되면 value
를 읽는 구성 가능한 함수의 리컴포지션이 예약됩니다. ExpandingCard
의 경우 expanded
가 변경될 때마다 ExpandingCard
가 recomposition됩니다.
다음과 같은 방법으로 MutableState
객체를 선언할 수 있습니다.
val mutableState = remember { mutableStateOf(default) }
var value by remember { mutableStateOf(default) }
val (value, setValue) = remember { mutableStateOf(default) }
remember
는 recomposition 과정 전반에서 상태를 유지하는데 도움은 되지만 configuration change에서는 상태가 유지되지 않습니다. configuration change에서도 상태를 유지하고 싶다면 rememberSaveable
를 사용해야합니다.
Jetpack Compose에서는 상태를 저장하기 위해 MutableState<T>
를 사용할 필요 없이 일반적으로 사용되던 다른 observable type도 지원합니다.
Jetpack Compose에서 observable type을 읽으려면 상태를 State<T>
로 변환해야 합니다. 그래야 상태가 변할 때 Jetpack Compose가 자동으로 recomposition됩니다.
Compose에는 Android에서 일반적으로 사용되는 observable type에서 State<T>
를 만들 수 있는 함수가 내장되어 있습니다.