Day 69:UI/UX 优化 — 视觉统一与代码清理
删除未使用组件、Navbar DRY 重构(-36%代码)、统一页面头部风格、添加全局 Footer、清理冗余代码
核心概念
什么是 UI/UX 优化?
一句话定义:在不改变功能的前提下,提升界面的视觉一致性、交互体验和代码可维护性。
类比理解:就像打扫房间 — 功能(家具)没变,但整理后更整洁、找东西更快、住起来更舒服。
为什么 Day 69 做这件事?
Day 68 架构评估发现了几个问题:未使用的组件、重复代码、不一致的页面结构。在 Day 70 响应式适配前,先把"卫生"打扫干净。
知识点详解
知识点1:DRY 重构 — Navbar
问题:Navbar 中 4 个桌面导航链接 + 4 个移动端链接 = 8 组完全重复的 className 逻辑。
解决方案:
// Before: 152 行,每个链接重复 className
<Link href="/" className={pathname === '/' ? 'active...' : 'inactive...'}>
<Home /> Home
</Link>
<Link href="/analytics" className={pathname === '/analytics' ? ...}>
<BarChart3 /> Analytics
</Link>
// ... 重复 6 次
// After: 97 行,数据驱动渲染
const NAV_ITEMS = [
{ href: '/', label: 'Home', icon: Home, exact: true },
{ href: '/analytics', label: 'Analytics', icon: BarChart3, exact: true },
{ href: '/whale', label: 'Whale', icon: Fish, exact: true },
{ href: '/blog', label: 'Blog', icon: BookOpen, exact: false },
]
{NAV_ITEMS.map(({ href, label, icon: Icon, exact }) => (
<Link key={href} href={href} className={isActive(href, exact) ? ... : ...}>
<Icon /> {label}
</Link>
))}
效果:代码减少 36%,新增导航项只需在数组加一行。
知识点2:视觉一致性
问题:子页面(Analytics、Whale)有返回箭头,Dashboard 没有;头部结构不一致。
解决方案:
| 页面 | Before | After |
|---|---|---|
| Dashboard | h1 + p | h1 + p (不变) |
| Analytics | ArrowLeft + h1 + p | h1 + p (统一) |
| Whale | ArrowLeft + h1 + p | h1 + p (统一) |
| Blog | h1 + p | h1 + p (不变) |
原则:Navbar 已提供导航,子页面不再需要返回箭头。所有页面统一为 h1 (text-3xl, text-primary) + p (text-gray-400) 模式。
知识点3:死代码清理
WalletInfo.tsx 删除原因:
- 54 行代码
- 未被任何页面导入
- 功能已被 Portfolio 组件完全覆盖
- 保留只会造成维护负担
代码卫生:
- EthPrice.tsx / Portfolio.tsx 尾部多余空行清理
- Dashboard 的 Day 开发注释移除(用户看不到)
知识点4:全局 Footer
新增:在 layout.tsx 中添加 Footer,所有页面自动继承。
┌──────────────────────────────┐
│ Navbar (sticky top) │
├──────────────────────────────┤
│ │
│ Page Content │
│ │
├──────────────────────────────┤
│ Footer │
│ 项目名 | GitHub | Blog │
└──────────────────────────────┘
对比分析
改动前后对比
| 指标 | Before | After | 变化 |
|---|---|---|---|
| 组件文件数 | 9 | 8 | -1 (删 WalletInfo) |
| Navbar 代码行 | 152 | 97 | -36% |
| Dashboard 代码行 | 45 | 33 | -27% |
| Analytics 代码行 | 66 | 46 | -30% |
| Whale 代码行 | 53 | 35 | -34% |
| 页面头部风格 | 不统一 | 统一 | 一致性提升 |
| Footer | 无 | 全局 | 完整性提升 |
链上实操记录
操作1:代码改动执行
步骤:
- 删除
src/components/WalletInfo.tsx - 重写
Navbar.tsx:提取 NAV_ITEMS + isActive() - 简化
app/page.tsx:移除冗余 grid 包裹 - 统一
analytics/page.tsx和whale/page.tsx头部 - 在
layout.tsx添加 Footer - 清理 EthPrice/Portfolio 尾部空行
验证:npx next build — 63 页面全部静态生成成功,0 错误
今日思考
问题1:什么时候应该重构?
代码重构的信号:
- 重复出现 3 次以上 → 提取为共享组件/函数(如 Navbar)
- 组件未被使用 → 立即删除(如 WalletInfo)
- 风格不一致 → 统一为模式(如页面头部)
问题2:删代码 vs 保留"以防万一"?
删。未使用的代码是负债而非资产 — 它增加维护成本、混淆新人理解、可能引入误解。如果真的需要,git history 可以找回。
问题3:Footer 有多重要?
对于作品集项目,Footer 完善了页面结构的完整性。面试官会注意到一个"完整"的产品 vs 一个"半成品"之间的差异。成本低,收益明确。
面试题准备
Q:你如何保证产品的 UI 一致性?
30秒版本: 三个层面 — 组件级(共享组件库)、页面级(统一布局模式)、全局级(设计 Token 如颜色/间距/字体)。实践中用 Tailwind 的配置文件统一设计语言,用数据驱动渲染减少重复。
2分钟版本:
- 设计 Token:在 tailwind.config 中定义 background/surface/primary/accent 等颜色
- 布局模式:所有页面统一 container + px-4 + py-6 + h1+p 头部
- 组件复用:NavLink、PostCard 等提取为可复用组件
- DRY 原则:数据驱动渲染(NAV_ITEMS 数组),避免 className 重复
- 代码审查:定期清理死代码、统一代码风格
学习资源
| 资源 | 说明 |
|---|---|
| Refactoring UI (书) | UI 设计实用原则 |
| Tailwind CSS Docs | 设计 Token 和工具类 |
| React Patterns | 组件设计模式 |
明日预告
Day 70:响应式适配
- 移动端表格横向滚动优化
- 触摸友好的交互元素
- 小屏幕下的布局调整
- Lighthouse 移动端评分测试