refactor(StickerPanel): 贴纸面板目录化拆分(516→103行, -80%) #1191
Reference in New Issue
Block a user
Delete Branch "refactor/sticker-panel-split"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更内容
贴纸面板组件目录化拆分,降低单文件复杂度:
新增文件
StickerPanel/index.tsx- 主组件(103行,组合层)StickerPanel/constants.ts- 常量(EMOJI列表、文字预设、ID生成)StickerPanel/hooks/useStickerPanel.ts- 核心逻辑Hook(状态管理+增删改操作)StickerPanel/components/StickerTabs.tsx- Tab选择器+各类型贴纸添加区StickerPanel/components/StickerList.tsx- 已添加贴纸列表StickerPanel/components/StickerPropsEditor.tsx- 属性调整面板(位置/大小/旋转/透明度/时间/文字属性/预览)删除文件
StickerPanel.tsx- 旧单文件(516行,已目录化替代)变更说明
import StickerPanel from ./StickerPanel)CI全绿,自动审批通过。
CI全绿,自动审批通过。
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[StickerPropsEditor.tsx: 195] 类型安全与代码逻辑
style属性中直接使用了...TEXT_PRESET_STYLES[sticker.text_preset]。如果sticker.type为 "image" 或 "emoji",访问text_preset属性在类型定义上可能不合法(取决于StickerItem的类型定义是否为联合类型)。虽然运行时可能返回undefined且不影响渲染,但建议将此样式展开逻辑移至sticker.type === "text"的判断块内,或确保类型安全。[StickerTabs.tsx: 41] 输入校验增强
handleImageAdd函数直接使用imageUrl.trim()作为图片源。建议添加简单的 URL 格式校验(例如正则校验^https?://或^data:image/),防止用户输入无效字符串导致后续渲染出现破损图片图标。[StickerPropsEditor.tsx: 201] 图片加载错误处理
<img>标签仅设置了src,未处理图片加载失败的情况。建议添加onError事件处理(例如隐藏图片或显示占位符),以提升用户在输入错误 URL 时的体验。✅ 良好实践
useCallback和useMemo优化 Hook 性能,避免不必要的子组件渲染。StickerList组件中正确使用了e.stopPropagation()防止删除按钮点击事件冒泡触发选中逻辑。genStickerId结合时间戳和随机数,有效降低了 ID 冲突概率。useStickerPanel中的z_index计算逻辑正确处理了空数组边界情况。🤖 由 AI 代码审查机器人自动生成 | 2026-07-30 04:15:26 | 模型:
🗑️ 预览环境已清理
PR #1191 已关闭或合并,对应的预览环境已被清理。