# 交互与状态生命周期检查项

## 交互流程与状态一致性

- 事件处理函数更新了错误的状态分支，导致按钮、弹窗、表单或加载态卡住
- async 提交流程只处理成功路径，失败后没有恢复 loading、禁用态或错误提示
- 派生状态可以由 props 或已有 state 计算，却被额外存一份，导致数据源不一致
- `useEffect`、`watch`、订阅或事件监听缺少清理，导致重复触发或内存泄漏
- 列表、条件渲染或切换视图时 key 不稳定，导致组件状态错位

## 表单与边界条件

- 空值、空数组、空字符串、`0`、`false` 等合法值被误判为“无数据”
- 提交前缺少必要的禁用/防重入处理，重复点击会造成多次请求
- 表单校验只在 happy path 下工作，错误态、回填、重置、回显场景失效
- 可选字段在渲染或格式化时直接访问属性，存在 `undefined` 崩溃风险
- 组件卸载后仍更新 state，导致警告、状态污染或用户感知异常

## 组件边界与可维护性

- 一个组件同时承担数据请求、业务编排、展示与样式细节，职责过重
- props 设计泄露过多内部细节，调用方必须传入一组脆弱参数才能工作
- 共享逻辑被复制到多个组件，而不是抽成 hook、composable 或 utility
- 魔法字符串、裸枚举值、硬编码状态常量散落在模板和逻辑中

## 测试

- 交互行为发生变化，但没有新增或更新组件测试、交互测试或回归测试
- 只测静态渲染，未覆盖点击、输入、异步完成、错误提示与边界场景
- 断言过于宽泛，无法证明状态切换、按钮禁用、错误提示等关键行为

## 排查思路

审查时依次问自己：

- 用户快速点击、重复提交、接口失败、组件卸载时，页面状态会不会错乱？
- 这里的状态是单一事实来源，还是复制了一份容易漂移的派生数据？
- 这段逻辑在列表重排、条件渲染、路由切换后还成立吗？
- 如果没有明确代码路径支撑，不作为正式问题输出。
