该技能提供现代 React 的 UI 状态处理模式,核心原则包括:不展示过期界面(仅在实际加载时显示 loading)、始终向用户暴露错误、乐观更新让界面显得即时、渐进式披露、优雅降级(部分数据优于无数据)。
加载状态:仅当没有数据可显示时才显示加载指示器,如 if (loading && !data) 才显示 spinner,避免重新获取时闪烁;提供加载状态决策树(先判断错误、再判断加载且无数据、最后判断有数据/空数据/回退)。已知内容形状与列表/卡片、初始页面加载用骨架屏;未知形状、弹窗操作、按钮提交、内联操作用 spinner。
错误处理:分层级为字段级内联错误、Toast 通知、页面级错误横幅、全屏错误页;关键是不静默吞掉错误,mutation 需 onError 处理并向用户提示。提供 ErrorState 组件模式(含 error、onRetry、title)。
按钮状态:异步操作期间必须禁用触发按钮并显示 loading,避免重复提交。
空状态:每个列表/集合都必须有空状态,如搜索无结果、列表暂无条目,并支持带操作按钮的上下文空状态。
表单提交:校验失败提示、提交期间禁用与 loading、成功/失败回调。
同时列出反模式(有数据仍显示 spinner、catch 中只 console.log、按钮不禁用)和完成前检查清单,并可与其他技能(如 graphql-schema、testing-patterns、formik-patterns)集成。资料未提供安装命令、许可与价格信息。