Jetpack Compose Side Effects相关疑问:onValueChange改值、显示Toast是否为副作用
Compose 副作用问题解答
你此前对Compose副作用的基础认知是准确的:Compose 中的副作用,指的是不受可组合函数生命周期、重组逻辑管控,发生在可组合项作用域之外的操作,我们可以基于这个标准判断两个场景的属性:
onValueChange 回调中修改 TextFieldValue 是否属于副作用
不属于。
常规开发中我们都会通过remember { mutableStateOf(TextFieldValue()) }声明 TextField 绑定的状态,onValueChange是用户输入触发的交互回调,在回调中更新状态属于 Compose 状态管理体系内的预期行为,目的是驱动重组刷新 TextField 的展示内容,完全受控于 Compose 的生命周期逻辑,因此不属于副作用。
只有直接在可组合项的顶层作用域(非事件回调、非副作用API作用域)修改 TextFieldValue 时,才属于会引发重组异常的副作用。可组合项中展示 Toast 是否属于副作用
属于。
Toast 是 Android 系统级别的 UI 组件,它的展示、销毁生命周期完全脱离 Compose 的重组管控。如果你直接在可组合项的顶层作用域调用 Toast 展示方法,每次可组合项触发重组都会重复弹出 Toast,完全不符合业务预期,这就是典型的副作用表现。这类操作必须通过LaunchedEffect、SideEffect等 Compose 官方提供的副作用API包裹,限定触发时机,避免随重组重复执行。
内容的提问来源于stack exchange,提问作者Ji Sungbin
相关产品推荐
相关产品推荐

