remember 是 Compose 中用于缓存值的工具。在重组(Recomposition)时,
它帮助 Composable 函数记住之前计算的结果,避免重复初始化。
| 特性 | 说明 | 学生友好比喻 🎒 |
|---|---|---|
| 💾 缓存 | 重组时不重新计算,保留上次的值 | 像书包里的文具,每天不用重新买 |
| 🔄 生命周期 | 与 Composable 在组合树中的位置绑定 | 座位不变,课本就一直放在桌上 |
| 🧩 键参数 | 可传入 keys,key 变化时重新计算 | 换课表了才换课本 |
| ⚙️ 结合状态 | 常与 mutableStateOf 搭配,驱动重组 | 值变了,黑板上的数字才擦掉重写 |
// 典型用法:remember 缓存一个对象 val count = remember { mutableStateOf(0) } // 或者使用 by 委托 (更简洁) var count by remember { mutableStateOf(0) }
📌 remember 保证重组时 mutableStateOf(0) 只创建一次,
后续重组直接读取已有状态,不会重置为 0。
mutableStateOf 创建一个 可观察 的容器,当值改变时,
Compose 会自动调度重组。
mutableStateOf(初始值)MutableState<T>remember 天生一对// 创建各种可变状态 var name by remember { mutableStateOf("小明") } var age by remember { mutableStateOf(8) } var isHappy by remember { mutableStateOf(true) }
读取状态时,Compose 自动追踪依赖;更新时触发重组。
// 读取:直接在 Composable 中使用 count Text(text = "点击次数: $count") // 更新:通过 setter 或 委托赋值 Button(onClick = { count++ }) { Text("➕ 加一") }
🔄 每次 count++ 执行,所有读取 count 的 Composable 都会智能重组。
💡 重组是声明式的:你描述界面应如何反映状态,Compose 自动处理更新。
// 重组示例:只有 count 变化时,Text 重组,Button 不重组 @Composable fun CounterApp() { var count by remember { mutableStateOf(0) } Column { Text("数值: $count") // ① 依赖 count Button(onClick = { count++ }) { // ② 不读取 count,不重组 Text("增加") } } }
| 概念 | 作用 | 口诀 |
|---|---|---|
| remember | 缓存值,避免重组时重置 | 📦 记住上一次 |
| mutableStateOf | 创建可观察可变状态 | 🔔 变了就通知 |
| 状态读取 | 建立依赖关系 | 👀 读谁依赖谁 |
| 状态更新 | 触发重组 | ✍️ 改了就重绘 |
| 重组机制 | 最小范围更新 | 🎯 只改受影响的部分 |