常見問題
1. easycom 設定改了不生效
現象:在 pages.json 加了 easycom 規則,或改了規則,但範本裡的 <lh-xxx> 還是報「元件未註冊」。
原因:uni-app 為編譯效能考量,改動 pages.json 的 easycom 不會觸發重新編譯。
解法:改動規則後,改動一下任一頁面內容(敲個空格儲存即可)觸發重編譯;或直接重啟 dev server。
2. ref 拿不到元件 / 度量傳回空
現象:onLoad 裡呼叫元件 ref 方法,或呼叫 getLhRect / useLhPopper 相關能力,拿到 undefined 或空矩形。
原因:onLoad 階段元件尚未建立完畢,子元件實例與節點都還沒就緒。
解法:所有 ref 呼叫與節點度量放在 onReady 之後(onReady 對應頁面首次渲染完成):
import { onReady } from '@dcloudio/uni-app'
onReady(() => {
// 這裡才能安全存取子元件 ref / 度量節點
})3. 命令式服務(message / loading)呼叫後沒反應
現象:useLhMessage().success(...) 呼叫了,控制台有 console.error 告警,但頁面沒出現訊息。
原因:小程序無法 JS 建立 DOM,命令式服務採用掛載點模式——頁面裡必須先放 <lh-message /> / <lh-loading />,呼叫只是往單例 store 裡推記錄,由掛載點元件渲染。
解法:在需要的頁面(或一個常駐的根包裹元件)裡放掛載點:
<lh-config-provider>
<view><!-- 頁面內容 --></view>
<lh-message />
<lh-loading />
</lh-config-provider>告警是刻意設計的——不靜默降級,避免「呼叫看似生效、實際沒反應」的隱蔽 bug。
4. 樣式沒生效 / 類別名在但樣式缺失
排查順序:
- 確認引了兩個 CSS 產物:
@lh-ui/uniapp/src/theme/index.css與@lh-ui/uniapp/src/icon/iconfont.css。 漏引主題變數時,所有var(--lh-*)會回退到預設值(顏色、圓角全不對)。 - 確認沒有覆蓋元件級的
styleIsolation。元件 SFC 自帶styleIsolation: 'shared'+addGlobalClass: true;若專案級設定強制了更嚴格的隔離,元件樣式會互相不可見。 - 自訂樣式請透過
custom-class/custom-styleprop 傳入,不要在頁面裡直接寫 元件內部 BEM 類別名(.lh-button__text之類的內部類別名不屬於公開 API)。
5. 小程序包體積裡怎麼有 iconfont 的 base64
那是圖示字型(約幾十 KB),內嵌在 CSS 裡隨包發布。微信小程序不支援 <svg> 標籤, 圖示必須走字型方案;base64 內嵌是因為小程序的 @font-face 不允許引本地字型檔 (wxss 裡 url(...) 只支援網路位址或 base64)。這是 uni-app 圖示方案的主流做法。
6. H5 裡彈層位置正常,小程序裡偏了
彈層定位走「兩幀度量 → 定位 → 顯示」時序(先透明渲染量尺寸,再定位,最後顯示防閃爍)。 如果偏了,通常是呼叫時序問題:確認定位觸發在 onReady 之後,且 trigger 節點已經布局完成。 另外注意小程序的 getLhRect 是非同步的,不能假設同步拿到結果。
7. 暗色模式不生效
暗色變數掛在 page.dark, .dark 上,由 ConfigProvider 的包裹節點加 dark 類別切換。 確認 <lh-config-provider :theme="dark"> 確實包裹住了需要暗色的內容範圍 (不像 web 端掛在 document.documentElement 上是全域的,本庫的作用域跟著包裹節點走)。