题目
用户反馈:「我的资产列表是空的,但我明明有资产。」排查发现是 RPC 短暂失败,界面把失败当成了空列表。
请说明这类问题为什么常见,以及界面应该如何区分三种状态才能避免误导。
考察目标
- 能否识别失败与空数据的语义差别。
- 是否理解默认值处理掩盖问题的风险。
- 能否给出三态设计与重试入口。
考察三态区分的必要性,以及把失败渲染成空数据带来的误导。
用户反馈:「我的资产列表是空的,但我明明有资产。」排查发现是 RPC 短暂失败,界面把失败当成了空列表。
请说明这类问题为什么常见,以及界面应该如何区分三种状态才能避免误导。
「没有数据」是一次成功查询的有效结果,「读取失败」表示这次读取没有拿到结果;JSON-RPC 规范要求错误响应的 error 成员携带 code 与 message,因此两者在数据层就可以区分。把失败渲染成空列表,用户会以为资产消失。
error 成员是包含 code 与 message 的对象,与成功响应的结果分支不同(依据:EIP-1474 §Concepts 的 Error codes)。status 区分 pending、success 与 error,isLoading 仅在首次请求进行中为真,error 保存错误对象、失败后默认保持为空值(依据:wagmi useReadContract §Return Type 的 status、isLoading、error)。isRefetchError 用于区分「首次加载失败」与「后台重取失败」,后台重取失败时组件仍能拿到上一次成功的数据字段,可据此保留旧数据并单独提示(依据:wagmi useReadContract §Return Type 的 isRefetchError、data)。isRefetchError 可区分后台失败;依据:wagmi useReadContract §Return Type 的 isRefetchError)。发现这道题有问题? 反馈此题