#每天一个知识点#
jetpack compose 的有状态示例代码和解析

Jetpack Compose 采用声明式UI,有状态组件核心是状态驱动界面,状态变更自动重组UI,区别于传统View手动刷新。Compose遵循单向状态流,状态尽量上提,由可信数据源持有,UI仅订阅展示,避免状态分散难以维护。

```kotlin
@Composable
fun CounterScreen() {
// remember:组合内保存状态,重组不丢失;mutableStateOf:创建可观察状态
var count by remember { mutableStateOf(0) }
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text(text = "计数:$count", fontSize = 22.sp)
Button(onClick = { count++ }) {
Text("点我+1")
}
}
}
``` 

1.  mutableStateOf(0) :生成可观察State,是状态载体,值变化会触发订阅该状态的Composable重组。
2.  remember {} :记忆函数,绑定到当前组合树节点。界面正常重组(如旋转、重组刷新)时,remember缓存状态,不会反复初始化;页面销毁移除组合树,状态随之清空。
3.  by 委托语法:简化 .value 读写,直接读写count等价于state.value。
4. 缺陷:该状态是本地内部状态,仅当前组件持有。屏幕配置变更(旋转Activity),Activity重建,remember状态丢失,无法跨配置持久化。
如果需要旋转保状态,要把状态抽至ViewModel,ViewModel生命周期独立于页面,配置变更不会销毁,搭配StateFlow对外暴露只读状态,实现业务与UI解耦,也是CMP跨平台推荐写法。
本地remember适合轻量临时状态,ViewModel承载页面业务状态,二者分工明确,是Compose状态管理最基础的两套方案。
[玫瑰][玫瑰][玫瑰]
展开
评论