You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中未用remember的targetValue随滑块变动问题求助

问题解答

1. 关于by remember变量变更触发UI更新的机制

在Jetpack Compose中,remember的核心作用是在Composable重组(Recomposition)时保留变量的状态,而by语法糖搭配mutableStateOf(或其他State类型),会让这个变量成为可观察的状态容器。当该状态变量的值发生改变时,Compose会自动识别并触发使用了此状态的UI区域进行重组,从而完成UI更新。
简单来说:by remember { mutableStateOf(...) } 既保证变量在重组时不会丢失原有值,又能在值变化时主动通知UI刷新。

2. Random.nextInt的调用时机与targetValue每次滑动都变的原因

你没有给targetValue添加remember修饰,意味着它只是一个每次重组都会重新计算的临时变量:

  • 滑动滑块时,控制滑块的状态变量(比如你用by remember声明的滑块数值)会发生变化,这会触发整个Composable组件的重组。
  • 每一次重组过程中,targetValue = Random.nextInt(...)这行代码都会被重新执行,所以每次滑动滑块,Random.nextInt都会被调用一次,targetValue自然也就跟着改变了。

对比SwiftUI:SwiftUI的@State和Compose的by remember { mutableStateOf(...) }作用类似,但如果在SwiftUI的View body里定义未加状态修饰的临时变量,虽然也会在View刷新时重新计算,但可能你之前的场景中刷新触发频率较低,或是写法差异导致了认知上的不同。

如果想让targetValue仅在Composable首次初始化时生成一次,后续重组时保持不变,必须给它加上remember:

val targetValue = remember { Random.nextInt(0, 100) }

内容的提问来源于stack exchange,提问作者Hyun Bin CHo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:12:04