天天看點

三分鐘遷移 antd@4

文章作者:陳帥等13w人

文章來源:https://zhuanlan.zhihu.com/p/109067115

antd@4 rc 釋出已經有一段時間了(大概已經兩周了),官網[1] 也已同步放出。最為一個酷愛嘗鮮的人,當然要第一時間安裝更新。在咨詢了豆醬老師得到了api 不會修改的承諾之後,我已經在自己的項目中遷移完成。第一時間享受到了的 antd@4 各種優勢。

? 更新點

首先對我而言最大的改進在于性能,select ,table 和 tree 已經全面支援了虛拟滾動,作為了早早的使用了 rc-tree來解決性能問題的人,antd@4 中提供自然是更好不過了,畢竟自己寫樣式和動态是非常複雜的。

重寫的 table 和 from 解決很多遺留的疑難雜症,具體可以檢視豆醬老師的 antd@4 系列文章[2],裡面詳細寫了心路曆程,在 form 中我們不需要使用

getFieldDecorator

Form.create

這兩個方法。已 Pro 全區塊為例,這兩個方法分别出現了 87 和 22次,在我自己的一個維護項目中找到了142 個

getFieldDecorator

,更不用說為了封裝元件

getFieldDecorator

被當成 props 傳來傳去的造成的各種複雜性提升了。在 v4 中我們終于可以擺脫它了。

三分鐘遷移 antd@4

瞧這都是删除的 diff

Table 現在也可以自動的獲得寬度,并且擁有更加優秀的固定到側邊,已 Pro-Table[3] 為例,這裡是 3.0 的 table。

三分鐘遷移 antd@4

在 4.0 中,不會發生高度錯位的問題。

三分鐘遷移 antd@4

? 遷移方法

antd@4 變得更加多才多藝,帶來了巨量的提升,那我們怎麼才能使用到這麼棒的 4.0 呢 , 其實很簡單,Pro 已經全部遷移了一把[4] 。官方貼心的為我們提供了 codemod-v4,使用起來也是非常簡單。

# 通過 npx 直接運作
npx -p @ant-design/codemod-v4 antd4-codemod src

# 或者全局安裝
# 使用 npm
npm i -g @ant-design/codemod-v4
# 或者使用 yarn
yarn global add @ant-design/codemod-v4

# 運作
antd4-codemod src
           

複制

值得注意的是 如果項目中使用了

<Icon type={type} />

會轉化成

LegacyIcon

,這裡需要檢查一下,如果你不是元件庫你一定是不需要

LegacyIcon

,遷移之後一定要删除它,不然會造成圖示檔案被全量打入,它可是有 540K 左右的大小。

為了更加的語義化,icon 将從 i 标簽修改為 span 标簽,改完之後需要記得去檢視一下有沒有類似

i{}

i.anticon

等用法,如果有可以修改為

span{}

,

span.antion

來保證遷移完成的樣式問題。

另外由于 form 不相容,codemod 不會自動幫你遷移到新的寫法, 但是遷移到相容包

@ant-design/compatible

友善在和新版本一起使用,而不用完全遷移。相容包中

ant-from

類名将會更新為

ant-legacy-form

,如果你修改了 form 的預設樣式記得檢查一下,并且修改它。

如果碰到表單無法撐開的問題可以加入下面的代碼:

:global {
  .ant-legacy-form-item .ant-legacy-form-item-control-wrapper {
     width: 100%;
   }
}
           

複制

? Pro中使用

Pro 在第一時間也遷移了 antd@4 ,我們隻需要在 create umi 中選擇 ant-design-pro,即可獲得最新的 4.0 分支代碼。

❯❯❯ create-umi
? Select the boilerplate type ant-design-pro
? ? Which language do you want to use? TypeScript
? ? Want to use better and faster antd? Yes
>
> 使用 antd 4.0 可能會有一些相容性問題,閱讀下面的文檔了解具體的改動
> There may be some compatibility issues when using antd 4.0. Read the following documents for specific changes
> https://next.ant.design/docs/react/migration-v4-cn
>
           

複制

如果你想獲得遷移到新的版本,可以按照上面的文檔描述實作,但是 Pro 中支援通過設定 icon 配置菜單圖示,在 4.0 中将無法得到支援,是以我們提供了相應的插件[5]來保留此功能。

使用方式如下 :

yarn add umi-plugin-antd-icon-config -D
           

複制

并且在 config.ts 中設定

export default {
  plugins:[['umi-plugin-antd-icon-config', {}]],
}
           

複制

無痛遷移 antd@4 就是這麼簡單。所有的官方區塊也已經支援了 antd@4,請大家安心使用。如果想使用 antd 的 新特性,不打包全部的 icon, 可以嘗試更新 [email protected]

由于 4.0 的 icon 有一些删改,如果發現圖示消失,請在 antd 官網中尋找合适的進行替換。

✨ 一個預告

Pro 4 已經釋出有一些時間了,在内外部的各種實踐中我們期望可以探索出一套最佳實踐,sorrycc[6] 的文章中做了很深的思考。接下來我們會釋出我們的解決方案。敬請期待!

“在看轉發”是最大的支援

參考資料

[1]

官網: https://link.zhihu.com/?target=https%3A//next.ant.design/index

[2]

文章: https://www.zhihu.com/people/smith-jiang/activities

[3]

Pro-Table: https://link.zhihu.com/?target=https%3A//protable.ant.design/

[4]

一把: https://link.zhihu.com/?target=https%3A//github.com/ant-design/pro-blocks/issues/145

[5]

插件: https://link.zhihu.com/?target=https%3A//github.com/umijs/umi-plugin-antd-icon-config

[6]

sorrycc: https://link.zhihu.com/?target=https%3A//github.com/sorrycc/blog/issues/90