前端技術棧,為什么越堆越亂?——以及如何優雅收割冗余
說實話,前端開發本該愈發簡潔易用。可到了2025年,我們卻常常需要半打庫才勉強渲染一個“花里胡哨”的組件。要是把搭建技術棧比作盲折宜家家具,你絕不是唯一一個手忙腳亂的人。
一、我們是怎樣陷入“庫海”深淵的?
有時候,一切都始于一個純粹的 React 項目。
- “需要狀態管理?”——Redux 太繁瑣,轉而試試更輕的 Zustand。
- “要做樣式?”——先上 Tailwind,再夾帶一票 CSS-in-JS,最后忍不住又裝了個 UI 庫。
- “數據請求用什么?”——Axios,咦,Fetch API 不也能?
眨眼間,package.json 里堆滿了十幾二十個依賴,仿佛在說:一場迷你級 SaaS 應用就此誕生,盡管你只是想寫個博客。
二、真正的“罪魁禍首”:復雜度蠕變
庫的增加往往并非刻意,而是悄無聲息的侵蝕:
- “大家都在用”癥候群:Tailwind、Zustand、Framer Motion……流行就裝,不問需不需要。
- 框架 FOMO(Fear Of Missing Out):原本只想要 React,結果忍不住想試 Next.js、Remix、Astro。
- 過早優化:明明簡單的 useState 足以滿足需求,卻先一步引入全局狀態管理。
- 過度工程:500 種變體的組件庫、30KB 運行時開銷的 CSS-in-JS,就是為渲染一個卡片。
因此,問題并非工具本身,而是在正確的場景下做出恰當選擇。
三、化繁為簡的四大錦囊
1. 剔除臃腫的狀態管理
如果你的應用只是中小型項目——比如博客、作品集、簡單表單——那么:
function Counter() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(c => c + 1)}>{count}</button>;
}
原生 hooks 就能搞定大多數需求。
何時引入外部庫?當你確實需要跨頁面的深度同步(如購物車、實時協同等),再考慮輕量級 Zustand 或 Jotai。
2. 選定一種 UI 樣式方案,不要雜糅
將 Tailwind、CSS Modules、Chakra UI、CSS-in-JS 全部塞進項目,只會制造冗余和沖突。
- Utility-First(Tailwind):速寫樣式,樂于原子化。
- CSS Modules:組件級作用域,適合復雜樣式。
- 純粹 Vanilla CSS:依舊靈活,零運行時成本。
// Tailwind 示例
export default function Card() {
return (
<div className="p-4 bg-white rounded shadow">
<h2 className="text-xl font-bold">標題</h2>
<p className="mt-2 text-gray-600">內容描述</p>
</div>
);
}
3. 別濫用動畫,學會輕重緩急
一個簡單的懸停效果,用純 CSS 就能流暢實現:
button:hover { transform: scale(1.05); transition: transform 0.2s; }
何時用 Framer Motion?僅在需要復雜動畫編排(如列表錯落出現、頁面級切換)時,再引入專業動畫庫。
4. 簡化數據請求,Fetch 足矣
現代瀏覽器的 Fetch API 已經十分強大:
async function fetchData() {
const res = await fetch('/api/data');
if (!res.ok) throw new Error('網絡錯誤');
return await res.json();
}
何時保留 Axios?當你的項目需要統一攔截器、復雜重試機制或自定義請求頭時,Axios 才是合適之選。
四、最優前端技術棧清單
大多數小中型前端項目,只需以下組件即可游刃有余:
功能 | 工具 | 使用場景 |
框架 | Next.js | SSG/靈活切換,免費獲得路由和優化 |
狀態管理 | useState/useReducer | 簡單狀態管理;僅在復雜場景時才用 Zustand 或 Jotai |
樣式方案 | Tailwind / CSS Modules / Vanilla CSS | 二選一,專一使用,不要混搭 |
動畫 | 純 CSS / Framer Motion | 基礎交互用 CSS,復雜編排用 Framer Motion |
數據請求 | Fetch API / Axios | 大多數場景首選 Fetch,特殊需求再用 Axios |
圖標 & UI | Shadcn / Radix UI | 真正需要現成組件庫時使用 |
五、結語:少即是多,簡單更勝復雜
我們常誤以為更多工具意味著更佳體驗,但實踐告訴我:
最優秀的項目往往都是最簡潔的項目——少模塊、少依賴、少配置,意味著更快的構建速度、更輕的包體積和更少的維護成本。
別為一輛自行車裝上火箭引擎,只需選好一輛穩健可靠的單車,輕松上路就好。