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

Jetpack Compose TextField出现竞态条件 打字时onValueChange随机追加初始值

你的代码写法完全符合Jetpack Compose官方的TextField使用规范,不存在逻辑错误。该问题是Compose 1.0.x版本的已知原生bug,和你的写法无关,核心原因是TextField组件和输入法(IME)的交互逻辑存在竞态条件:
当输入法快速触发多次onValueChange回调时,部分场景下Compose的状态同步逻辑会出现异常,错误地将未更新的旧状态值(也就是你的初始值InitialValue)和新输入的内容做拼接,而非直接使用回调返回的新值覆盖状态。

解决方案

  • 优先方案:升级Compose版本,该bug在Compose 1.1.0-alpha03及后续版本已经被官方修复,升级到1.1.0稳定版及更高版本即可彻底解决问题。
  • 临时兼容方案:如果当前项目暂时无法升级Compose版本,可以给onValueChange增加去重判断,规避错误的状态更新:
setContent {
    var testingText by remember { mutableStateOf("InitialValue") }
    TextField(
        value = testingText,
        onValueChange = { newText ->
            if (newText != testingText) {
                testingText = newText
            }
        },
        label = { Text("Testing") },
        modifier = Modifier.fillMaxWidth(),
    )
}
  • 额外验证:极小概率为模拟器自带输入法的兼容性问题,你也可以在模拟器中安装第三方输入法(如Gboard)复现验证,排除输入法本身的问题。

内容的提问来源于stack exchange,提问作者Eggman87

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:36:03