文章目录第 1 章 UDF 在 Compose 中的落点第 2 章 remember 与 rememberSaveable第 3 章 状态提升第 4 章 副作用 Effect踩坑第 5 章 derivedStateOf第 6 章 ViewModel 与事件第 7 章 治理清单面试速查 · 追问链追问链 #1remember vs ViewModel 追问链 #2LaunchedEffect 何时重跑 追问链 #3状态提升好处 ⭐追问链 #4与 MVI reduce 完整链路一句通相关推荐第 1 章 UDF 在 Compose 中的落点ViewModel StateFlow ──▶ collectAsStateWithLifecycle ──▶ Composable 只读 用户点击 ──▶ 回调 onXxx ──▶ ViewModel 更新状态与《MVVM 与单向数据流》同一契约Compose 只是渲染层。第 2 章 remember 与 rememberSaveableComposablefunSearchField(){varquerybyremember{mutableStateOf()}TextField(valuequery,onValueChange{queryit})}remember重组后保留配置变更可能丢。rememberSaveable经SavedStateRegistrysurvived 旋转小数据。业务列表、订单态进ViewModel不要全靠remember。第 3 章 状态提升ComposablefunParent(){varcountbyremember{mutableIntStateOf(0)}Counter(count,onInc{count})}ComposablefunCounter(count:Int,onInc:()-Unit){Button(onClickonInc){Text($count)}}谁需要读/写状态谁拥有mutableState子组件无状态stateless更易测和复用。第 4 章 副作用 EffectAPI用途LaunchedEffect(key)协程拉数、collect FlowDisposableEffect注册/注销监听SideEffect每次成功重组后同步非 Compose 状态LaunchedEffect(userId){viewModel.load(userId)}LaunchedEffect(Unit)只跑一次key 变则取消重跑。踩坑无 key 的 LaunchedEffect 在重组时重复执行。在 Composable 里直接viewModelScope.launch。第 5 章 derivedStateOfvallistbyviewModel.items.collectAsStateWithLifecycle()valfilteredbyremember{derivedStateOf{list.filter{it.done}}}仅当list引用或内容触发快照变化时重算避免每次重组全表 filter。第 6 章 ViewModel 与事件ComposablefunTodoRoute(vm:TodoViewModelhiltViewModel()){valstatebyvm.uiState.collectAsStateWithLifecycle()LaunchedEffect(Unit){vm.events.collect{/* 导航/Toast */}}TodoScreen(state,onRefreshvm::onRefresh)}状态StateFlow一次性事件SharedFlow/Channel《MVVM 与单向数据流》。第 7 章 治理清单检查项通过标准业务状态ViewModel StateFlow非 remember 扛全局收集collectAsStateWithLifecycle副作用LaunchedEffect/DisposableEffect非裸 launch提升子 Composable 无隐藏 mutableState性能列表 key、derivedStateOf 减算力面试速查 · 追问链追问链 #1remember vs ViewModel 参考回答UI 瞬态展开/输入焦点remember业务数据 ViewModelStateFlow。追问链 #2LaunchedEffect 何时重跑 参考回答key 变化或离开组合Unit key 仅首次进入。追问链 #3状态提升好处 ⭐参考回答单一数据源、子组件可复用、便于单测。追问链 #4与 MVI reduce 参考回答MVI 在 VMCompose 只 collect State、发 Intent 回调。完整链路一句通remember 管 UI 局部态→业务态 stateIn/StateFlow→collectAsStateWithLifecycle→LaunchedEffect 管副作用→事件通道旁路导航。相关推荐Kotlin 作用域函数let/apply 怎么选Kotlin 语法与空安全从零的第一课