記 Ant Designer Vue 2.0.1 layout 丟失樣式類名問題分析

尹宇星_Kim發表於2021-06-09

現象

<a-layout-sider /> 渲染到頁面上會變成 <section class="undefined-has-sider"> 丟失了 layout 字首

問題分析

排查了原始碼,看了下 antd 的檔案結構,發現其大體上是按元件模組分類

那麼 layout 元件自然就在 layout 資料夾下了。

定位到 layout.js 下的 generator 方法,下面是該方法的原始碼截圖:

注意第 68 行到 72 行這塊程式碼,不難理解這裡做的是屬性合併,問題就出在了 _extends 這個工具方法,同樣看下該方法的原始碼:

方法不難解讀,當瀏覽器支援 Object.assign 的時候,優先使用該方法進行屬性合併。

但是, Object.assign 最大的問題“無腦”合併,即後面的物件欄位即使是 undefined 也是會覆蓋前面的屬性的。

這也是出現這個問題的關鍵。

下面的截圖是我在瀏覽器裡斷點的時候,將 68 行到 72 行程式碼分開執行的結果:

layoutundefined 無情的覆蓋了

後記

雖然 2.0.1 版本肯定早就不用了,官方也應該修復了這個問題,但養成從根本上查到問題的原因,還是很重要的。

相關文章