Composable 내부에서 어떤 변수가 변화했을때 Composable 을 재구성하게 할려면 그 변수가 State가 되야한다.
@Composable 안에서 값 → State 로 만드는 방식은 크게 4종류가 있다.
val counter = remember { mutableStateOf(0) }
val spl by engine.spl.collectAsState()
val name by viewModel.name.observeAsState()
val state by produceState<Int>(initialValue = 0) {
value = withContext(Dispatchers.IO) { heavyWork() }
}
val currentValue by rememberUpdatedState(value)
val isLoud by derivedStateOf { spl > 80 }
val items = remember { mutableStateListOf<String>() }
val map = remember { mutableStateMapOf<String, Int>() }
| 방식 | 무엇을 하는가 | 대표 사용처 |
|---|---|---|
mutableStateOf() | 내부에서 State 생성 | 버튼 상태, UI 내부 값 |
collectAsState() | Flow → State 변환 | 외부 스트림 데이터 |
observeAsState() | LiveData → State 변환 | ViewModel LiveData |
produceState() | Coroutine 또는 Callback → State | 고급 비동기 데이터 |
rememberUpdatedState() | 최신 값 snapshot 유지 | callback 최적화 |
derivedStateOf() | 기존 State → 계산된 State | 성능 최적화 |
mutableStateListOf() | List 자체를 State로 | 목록 UI |