返回 Web3 笔记
Day 69

Day 69:UI/UX 优化 — 视觉统一与代码清理

删除未使用组件、Navbar DRY 重构(-36%代码)、统一页面头部风格、添加全局 Footer、清理冗余代码

2026-03-15
Web3UI/UX重构代码质量Day69Week10

核心概念

什么是 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 没有;头部结构不一致。

解决方案

页面BeforeAfter
Dashboardh1 + ph1 + p (不变)
AnalyticsArrowLeft + h1 + ph1 + p (统一)
WhaleArrowLeft + h1 + ph1 + p (统一)
Blogh1 + ph1 + p (不变)

原则:Navbar 已提供导航,子页面不再需要返回箭头。所有页面统一为 h1 (text-3xl, text-primary) + p (text-gray-400) 模式。

知识点3:死代码清理

WalletInfo.tsx 删除原因

  • 54 行代码
  • 未被任何页面导入
  • 功能已被 Portfolio 组件完全覆盖
  • 保留只会造成维护负担

代码卫生

  • EthPrice.tsx / Portfolio.tsx 尾部多余空行清理
  • Dashboard 的 Day 开发注释移除(用户看不到)

新增:在 layout.tsx 中添加 Footer,所有页面自动继承。

┌──────────────────────────────┐
│  Navbar (sticky top)          │
├──────────────────────────────┤
│                              │
│  Page Content                │
│                              │
├──────────────────────────────┤
│  Footer                      │
│  项目名 | GitHub | Blog      │
└──────────────────────────────┘

对比分析

改动前后对比

指标BeforeAfter变化
组件文件数98-1 (删 WalletInfo)
Navbar 代码行15297-36%
Dashboard 代码行4533-27%
Analytics 代码行6646-30%
Whale 代码行5335-34%
页面头部风格不统一统一一致性提升
Footer全局完整性提升

链上实操记录

操作1:代码改动执行

步骤

  1. 删除 src/components/WalletInfo.tsx
  2. 重写 Navbar.tsx:提取 NAV_ITEMS + isActive()
  3. 简化 app/page.tsx:移除冗余 grid 包裹
  4. 统一 analytics/page.tsxwhale/page.tsx 头部
  5. layout.tsx 添加 Footer
  6. 清理 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 移动端评分测试