Dev.to|📄 原文链接|2026-07-22 收录

乐观 UI 的竞态条件:只在第五次快速点击时才出现的 Bug

来源:dev.to/shubhradev — 2026-07-21 发布

📋 概述

作者使用 React 的 useOptimistic 为任务列表实现了即时打勾功能,单独点击时完美运行。但当模拟真实用户的快速连续点击(五连击)时,五个重叠请求同时发出,每次翻转同一个布尔值,最终 UI 看起来正确但数据库状态完全不匹配——没有崩溃、没有报错,只是静静地对不上了。修复方案是追踪每个行的待处理状态,在请求完成前禁用对应复选框,让第二次点击无效化而非发出竞态请求。这个修复与表单提交按钮禁止重复点击的原理相同,但作用于逐行级别。

🔑 核心要点

💡 金句

Optimistic UI is designed to look right immediately. Looking right and being right are not the same claim.
← 返回 Dev.to 首页