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

Jetpack Compose重组竞态疑问:快速点击消失按钮会触发check失败吗?

关于Compose按钮快速点击导致check失败的可能性分析

先看这段实现“点击后消失”的按钮代码:

@Composable
fun ButtonThatDisappearsOnClick() {
    var showButton by remember { mutableStateOf(true) }
    if (showButton) {
        Button(onClick = {
            check(showButton) { "onClick shouldn't be called for a hidden button" }  // !!!
            showButton = false
        }) {
            Text("My button")
        }
    }
}

你猜测用户快速点击两次按钮时,上面的check调用可能会失败,逻辑是:

  • 用户首次点击按钮,showButton被设为false,状态更新触发重组调度
  • 视图完成重组前再次快速点击,onClick会第二次触发,导致check校验失败

但实际上这种情况不可能发生,原因有两点:

  1. Compose的Button内置了防重复点击机制,点击后按钮会进入短暂的不可点击状态(比如保持按压视觉反馈),直到当前点击事件处理完成或者重组结束,不会接收重复的点击请求。
  2. 当showButton被设为false后,即便重组是异步调度的,Compose的状态系统会联动限制按钮的交互状态,在按钮真正被移除前,已经不会响应新的点击事件了。

你在实践中无法复现也印证了这一点,Compose框架底层已经处理了这类快速重复点击的场景,不会出现你担心的状态不一致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:01:07