需区分无数据、无匹配与出错
别名: 空状态分类 · 零结果 · 权限空状态 · loading versus empty
概念解释
有证据支撑的空结果状态分类(evidence-backed empty-result state taxonomy)根据系统实际知道的事实区分页面为何没有呈现条目:数据源成功返回且确实为空、已有数据但当前查询/筛选无匹配、请求失败而内容未知、用户没有查看权限,以及请求仍在加载而尚无结论。它们可能视觉上都是空白,却对应不同事实、责任和下一步。文案不能在证据不足时把“未确认”写成“没有”。
机制
渲染层只观察到 items 数组为空时,网络错误、权限过滤、未完成请求和真实零条目会坍缩成同一状态。可靠分类还需要请求生命周期、HTTP/领域结果、认证与 entitlement、查询条件、未筛选总量或可验证的基准,以及数据新鲜度。无数据是成功读取后的数据事实;无匹配是查询关系;错误表示读取未成功;权限拒绝表示存在访问边界但不应泄漏对象是否存在;loading 是非终态。只有先固定状态证据,文案才能诚实说明已知、未知及用户能做什么。
怎么研究
建立 source state × query × permission × request lifecycle 的故障注入矩阵,分别制造首次空库、清空后的库、零匹配、超时、离线、部分失败、会话过期、权限拒绝、慢响应和旧缓存。检查最终文案、动作和数据是否一致,并测用户对“是否存在数据、系统是否失败、我是否有权限”的判断、首个动作与恢复。日志应记录状态原因码、证据来源和转换,而非仅记录“empty shown”。避免用真实敏感对象验证权限态,以免研究界面本身泄漏存在性。
边界
系统可能只能确认当前页为空,不能确认整个集合为空;分片、分页、同步延迟和离线缓存都需要限定范围与时点。权限态应说明当前角色无法查看或完成动作,而不是暗示受保护资源存在。部分成功应保留可用内容并标记未加载范围,不宜把整页改写为全空或全错。错误消息的原因、责任与恢复措辞属于错误文案;加载进度和动画属于反馈组件,这里的任务只是避免把这些状态误命名为空。
怎么落地
- 建立互斥状态机:
loading、loaded_empty、no_match、forbidden、failed、partial与loaded_nonempty,为每个终态记录证据和允许转换,不用items.length === 0单独裁决。 - 为状态提供独立消息和原因码:真实无数据说明范围,无匹配回显查询条件,失败承认无法确认,权限态避免对象存在性泄漏,加载态不提前下零结果结论。
- 将客户端、API、缓存、搜索与权限服务的状态契约版本化;未知或冲突结果采用“暂时无法确认”及安全恢复路径,不猜测无数据。
- 用慢网、断网、空库、过滤、分页、过期身份和部分响应做端到端回归,并核对可见文案、读屏状态更新、动作和遥测都指向同一分类。