---
# System prepended metadata

title: 為什麼不要在大型專案使用 scss 管理 UI

---

# 為什麼在 React 專案使用 scss 管理 UI 是一件痛苦的事

## Case 1 同名 class 搜尋地獄
![](https://hackmd.io/_uploads/S1Q5E0zAh.png)

假設今天要修改這個畫面, 目標是把跑版的股名排版修改成上下兩排, 也就是不要水平 flex 排版
首先這裡的版面是由這個 stylesheet(card.scss) 控制:

![](https://hackmd.io/_uploads/HkwfBCzCn.png)

進入 card.scss

![](https://hackmd.io/_uploads/SJCEHAfA2.png)

但在修改前應該先確認這個 style 是否有在別處被使用, 避免改壞其他元件
Ctrl + Shift + F 全域搜尋後，出現以下結果:
![](https://hackmd.io/_uploads/BynTB0M02.png)

由於 scss 允許巢狀式 class 繼承寫法, 例如:
```scss
.card {
    &__header {
        display: flex;
        // ...style
      }
}
```

因此還得再搜尋是否在 `.card {}` 底下有 `&__header`,
或是 `.card__header`, 搜尋後又出現許多結果:
![](https://hackmd.io/_uploads/H1kpAJ70n.png)

經過排查後, 可喜可賀, 有兩個 css 檔案出現了 card__header:

![](https://hackmd.io/_uploads/r1tHZeXAn.png)
![](https://hackmd.io/_uploads/ryJsbe7C2.png)

現在來猜猜剛剛搜尋到在 component 使用中的 card__header 分別對應到哪個 stylesheet 吧:

![](https://hackmd.io/_uploads/SJ11Xg7Ah.png)

這是 card-container card__header, 因此這個檔案屬於 card.scss
![](https://hackmd.io/_uploads/ByTQBg70n.png)

這也是 card-container card__header, 因此這個檔案屬於 card.scss

![](https://hackmd.io/_uploads/SJvSrxmCh.png)
這也是 card-container card__header, 因此這個檔案屬於 card.scss


![](https://hackmd.io/_uploads/Sy9IrxQCh.png)
這是一個被當成 list 項目來 render 的元件, 所以還要往上查...

### 結論
到這邊我已經受不了了XD, 反正我要的只是在那個特定的頁面呈現不一樣的 style
因此要嘛加一個新的 css 規則來擾亂秩序, 要嘛直接 inline...

可以知道的是由於 scss 的自由度與全域性使得調查哪個 component 使用了哪條 css 規則是非常困難且痛苦的

就 React 專案來說, UI 控制應以元件為核心來管理, 每個元件應該要盡量能夠獨立運作, 不要依賴或被其他元件影響

但因 scss 可以巢狀撰寫 css 規則, 導致 React 元件要判斷 class 如何作用時還得往上找母元件來檢查有沒有使用特定的 class, 元件之間產生相依性, 超難維護, 更別提去排查大量相同命名了, 而且這個動作可能換了個人維護他也得再排查一次...

