# Retry Image Component Lessons
## 背景
图片生成任务完成后,远端文件或本地虚拟缓存路径可能短时间不可读,直接使用 `
` 会出现一次性加载失败的破图。任务队列已有 `RetryImage`,但其他生成图展示入口仍散落使用原生 `
` 或 CSS `background-image`。
## 经验
- 生成结果图统一使用公共 `RetryImage`,不要在各页面重复写 `onError` 重试。
- `RetryImage` 的失败通知应在重试耗尽后触发,避免外层第一次 `onError` 就切到失败占位。
- 列表、缩略图、画廊等紧凑 UI 默认关闭 skeleton,直接保持原 `
` 布局,避免额外 wrapper 撑乱尺寸。
- 需要 `ref/onLoad` 的媒体预览主图,可以通过 `forwardRef` 接入 `RetryImage`,保留自适应缩放逻辑。
- CSS `background-image` 不会触发组件重试,生成锚点这类背景预览要改成真实图片节点。
- 素材库类长列表仍应保留懒加载;可在 `LazyImage` 进入视口后下沉复用 `RetryImage`,兼顾性能和容错。
- 视频封面已有 `VideoPosterPreview` 专用重试逻辑,不必强行替换。
- 用户上传预览、本地帧图、品牌图标、画布内部图片元素不属于“生成后短时间不可读”的主风险面,除非出现实际问题,不应扩大替换范围。
## 替换优先级
1. 任务结果缩略图、批量生图预览、生成历史。
2. 工作流首尾帧、角色参考图、漫画/PPT/Markdown 生成图。
3. 媒体预览主图和缩略图队列。
4. 素材库和提示词历史中的生成图复用入口。
## 验证建议
- 跑 `pnpm nx run drawnix:typecheck`。
- 跑图片任务重试相关测试。
- 检查紧凑缩略图容器是否因 wrapper 发生尺寸变化。
- 搜索剩余 `
` 时按来源判断,不要机械替换所有图片节点。