Ant Design 4.0 發布,來看看如何升級?

2020-12-24 懸筆e絕

Ant Design 4.0正式版於 2 月 28 日提前發布,本文將幫助你從antd 3.x版本升級到antd 4.x版本。

升級準備

請先升級到 3.x 的最新版本,按照控制臺 warning 信息移除/修改相關的 API。升級項目 React 16.12.0 以上。如果你仍在使用 React 15,請參考React 16 升級文檔其餘 React 16 廢棄生命周期 API 請參考 遷移導引4.0 有哪些不兼容的變化

設計規範調整

行高從1.5(21px) 調整為1.5715(22px)。基礎圓角調整,由4px改為2px。Selected 顏色和 Hovered 顏色進行了交換。全局陰影優化,調整為三層陰影區分控制項層次關係。氣泡確認框中圖標的使用改變,由問號改為感嘆號。部分組件選中顏色統一改為@blue-1: #E6F7FF,對應hover顏色改為@gray-2: #FAFAFA。報錯色色值調整,由@red-5: #F5222D改為@red-5: #FF4D4F。分割線顏色明度降低,由#E8E8E8改為#F0F0F0。DatePicker 交互重做,面板和輸入框分離,範圍選擇現可單獨選擇開始和結束時間。Table 默認背景顏色從透明修改為白色。Tabs 火柴棍樣式縮短為和文字等長。兼容性調整

IE 最低支持版本為 IE 11。React 最低支持版本為 React 16.9,部分組件開始使用 hooks 進行重構。移除廢棄的 API

移除了 LocaleProvider,請使用ConfigProvider替代。移除了 Mention,請使用Mentions替代。移除了 Alert 的iconType屬性,請使用icon替代。移除了 Modal.xxx 的iconType屬性,請使用icon替代。移除了 Form.create 方法,form現可由Form.useForm獲取。移除了 Form.Item 的id屬性,請使用htmlFor替代。移除了 Typography 的setContentRef屬性,請使用ref替代。移除了 TimePicker 的allowEmpty屬性,請使用allowClear替代。移除了 Tag 的afterClose屬性,請使用onClose替代。移除了 Card 的noHovering屬性,請使用hoverable替代。移除了 Carousel 的vertical屬性,請使用dotPosition替代。移除了 Drawer 的wrapClassName屬性,請使用className替代。移除了 TextArea 的autosize屬性,請使用autoSize替代。移除了 Affix 的offset屬性,請使用offsetTop替代。移除了 Transfer 的onSearchChange屬性,請使用onSearch替代。移除了 Transfer 的body屬性,請使用children替代。移除了 Transfer 的lazy屬性,它並沒有起到真正的優化效果。移除了 Select 的combobox模式,請使用AutoComplete替代。圖標升級

在antd@3.9.0中,我們引入了 svg 圖標(為何使用 svg 圖標?)。使用了字符串命名的圖標 API 無法做到按需加載,因而全量引入了 svg 圖標文件,這大大增加了打包產物的尺寸。在 4.0 中,我們調整了圖標的使用 API 從而支持 tree shaking,減少 antd 默認包體積約 150 KB(Gzipped)。

舊版 Icon 使用方式將被廢棄:

import { Icon, Button } from'antd';const Demo = () => ( <div> <Icon type="smile" /> <Button icon="smile" /> </div>);4.0 中會採用按需引入的方式:

import { Button } from 'antd'; // tree-shaking supported- import { Icon } from 'antd';+ import { SmileOutlined } from '@ant-design/icons'; const Demo = () => ( <div>- <Icon type="smile" />+ <SmileOutlined /> <Button icon={<SmileOutlined />} /> </div> ); // or directly import import SmileOutlined from '@ant-design/icons/SmileOutlined';你將仍然可以通過兼容包繼續使用:

import { Button } from'antd';import { Icon } from'@ant-design/compatible';const Demo = () => ( <div> <Icon type="smile" /> <Button icon="smile" /> </div>);組件重構

Form 重寫不再需要Form.create。嵌套欄位支持從'xxx.yyy'改成['xxx', 'yyy']。DatePicker 重寫提供picker屬性用於選擇器切換。範圍選擇現在可以單獨選擇開始和結束時間。onPanelChange在面板值變化時也會觸發。自定義單元格樣式的類名從ant-calendar-date改為ant-picker-cell-inner。Tree、Select、TreeSelect、AutoComplete 重新寫使用虛擬滾動。onBlur時不再修改選中值。dropdownMatchSelectWidth不再自動適應內容寬度,請用數字設置下拉寬度。AutoComplete 不再支持optionLabelProp,請直接設置 Optionvalue屬性。Grid 組件使用 flex 布局。Button 的danger現在作為一個屬性而不是按鈕類型。Input、Select 的value為undefined時改為非受控狀態。Table 重寫在沒有columns時仍然會保留一列。嵌套dataIndex支持從'xxx.yyy'改成['xxx', 'yyy']。<Table columns={[ { title: 'Age',- dataIndex: 'user.age',+ dataIndex: ['user', 'age'], }, ]}/>開始升級

你可以手動對照上面的列表逐條檢查代碼進行修改,另外,我們也提供了一個 codemod cli 工具 @ant-design/codemod-v4 以幫助你快速升級到 v4 版本。

在運行 codemod cli 前,請先提交你的本地代碼修改。

# 通過 npx 直接運行npx -p @ant-design/codemod-v4 antd4-codemod src# 或者全局安裝# 使用 npmnpm i -g @ant-design/codemod-v4# 或者使用 yarnyarn global add @ant-design/codemod-v4# 運行antd4-codemod src

對於無法自動修改的部分,codemod 會在命令行進行提示,建議按提示手動修改。修改後可以反覆運行上述命令進行檢查。

注意 codemod 不能涵蓋所有場景,建議還是要按不兼容的變化逐條排查。

遷移工具修改詳情

@ant-design/codemod-v4會幫你遷移到 antd v4, 廢棄的組件則通過@ant-design/compatible保持運行, 一般來說你無需手動遷移。下方內容詳細介紹了整體的遷移和變化,你也可以參照變動手動修改。

將已廢棄的Form和Mention組件通過@ant-design/compatible包引入

- import { Form, Input, Button, Mention } from 'antd';+ import { Form, Mention } from '@ant-design/compatible';+ import '@ant-design/compatible/assets/index.css';+ import { Input, Button } from 'antd'; ReactDOM.render( ( <div> <Form> {getFieldDecorator('username')(<Input />)} <Button>Submit</Button> </Form> <Mention style={{ width: '100%' }} onChange={onChange} defaultValue={toContentState('@afc163')} defaultSuggestions={['afc163', 'benjycui']} onSelect={onSelect} /> </div> );**注意:**從@ant-design/compatible引入的老版本 Form 組件,樣式類名會從.ant-form變成.ant-legacy-form,如果你對其進行了樣式覆蓋,也需要相應修改。

用新的@ant-design/icons替換字符串類型的icon屬性值

import { Avatar, Button, Result } from 'antd';+ import { QuestionOutlined, UserOutlined } from '@ant-design/icons'; ReactDOM.render( <div>- <Button type="primary" shape="circle" icon="search" />+ <Button type="primary" shape="circle" icon={SearchOutlined} />- <Avatar shape="square" icon="user" />+ <Avatar shape="square" icon={UserOutlined} /> <Result- icon="question"+ icon={<QuestionOutlined />} title="Great, we have done all the operations!" extra={<Button type="primary">Next</Button>} /> </div>, mountNode, );將 v3 Icon 組件轉換成@ant-design/icons中引入

- import { Icon, Input } from 'antd';+ import { Input } from 'antd';+ import Icon, { CodeFilled, SmileOutlined, SmileTwoTone } from '@ant-design/icons'; const HeartSvg = () => ( <svg width="1em" height="1em" fill="currentColor" viewBox="0 0 1024 1024"> <path d="M923 plapla..." /> </svg> ); const HeartIcon = props => <Icon component={HeartSvg} {...props} />; ReactDOM.render( <div>- <Icon type="code" theme="filled" />+ <CodeFilled />- <Icon type="smile" theme="twoTone" twoToneColor="#eb2f96" />+ <SmileTwoTone twoToneColor="#eb2f96" />- <Icon type="code" theme={props.fill ? 'filled' : 'outlined'} />+ <LegacyIcon type="code" theme={props.fill ? 'filled' : 'outlined'} /> <HeartIcon /> <Icon viewBox="0 0 24 24"> <title>Cool Home</title> <path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" /> </Icon> <Input suffix={<SmileOutlined />} /> </div>, mountNode, );將 v3 LocaleProvider 組件轉換成 v4 ConfigProvider 組件

- import { LocaleProvider } from 'antd';+ import { ConfigProvider } from 'antd'; ReactDOM.render(- <LocaleProvider {...yourConfig}>+ <ConfigProvider {...yourConfig}> <Main />- </LocaleProvider>+ </ConfigProvider> mountNode, );將Modal.method()中字符串 icon 屬性的調用轉換成從@ant-design/icons中引入

import { Modal } from 'antd';+ import { AntDesignOutlined } from '@ant-design/icons'; Modal.confirm({- icon: 'ant-design',+ icon: <AntDesignOutlined />, title: 'Do you Want to delete these items?', content: 'Some descriptions', onOk() { console.log('OK'); }, onCancel() { console.log('Cancel'); }, });遇到問題

v4 做了非常多的細節改進和重構,我們儘可能收集了已知的所有不兼容變化和相關影響,但是有可能還是有一些場景我們沒有考慮到。如果你在升級過程中遇到了問題,請到 GitHub issues 和 codemod Issues 進行反饋。我們會儘快響應和相應改進這篇文檔。

相關焦點

  • Ant Design 4.0 正式發布
    2月28日,廣受開發者歡迎的前端開源項目Ant Design發布4.0正式版本。這是兩年多以來的首次發布的裡程碑版本。大家可以訪問 ant.design 了解更多信息,或在GitHub上關注Ant Design項目。
  • 玩轉Ant Design Pro 一
    ant design pro來源於ant design,其是一段自帶樣式的react組件,用於企業後臺的漂亮的,可控的組件。因為ant design很強大,阿里有些大神就直接將ant design繼續向上封裝成一個完整的項目,這就是ant design pro,注意ant design pro已經是一個成形的項目,配置環境已經好了,我們做項目只需要在其上進行增刪改就可以了,其就是個腳手。
  • Ant Design 4.0 正式版來了!究竟變化了多少,是否值得下水
    經過 1 個多月的反饋收集和調整之後,終於迎來了 4.0 的正式版!感謝在此期間每一位提供反饋、建議以及貢獻的人。我們會結合 rc 版本已經涉及的更新以及一些比較重要的新增內容於此進行列舉。完整的更新文檔可以點擊此處。
  • Ant Design 4.0正式發布:創造快樂工作
    2月28日,廣受開發者歡迎的前端開源項目Ant Design發布4.0正式版本。這是兩年多以來的首次發布的裡程碑版本。新版本中進行了多項改進,包括:   設計規範升級。增加了暗色主題和無邊框組件。   兼容性調整。最低支持IE 11,依賴的React最低版本升級到16.9。   更小的尺寸。
  • Ant Design 4.0,脫離業務的框架都是耍流氓
    2 月底,Ant Design 發布了4.0版本,在性能、交互、以及設計上進行了一次全面的革新。作為Ant Design 的實踐案例、業務需求方和同一層樓的小夥伴,語雀和Ant Design一起聊了聊「4.0 背後的故事」。
  • Ant Design 4.2.0 發布,企業級 UI 設計語言
    Eclipse 4.18 (2020-12) 穩定版已發布。
  • Ant Design 4.0.2 發布,企業級 UI 設計語言
    Go 1.16 發布了首個 Beta 測試版,正式版計劃於明年2月發布。
  • 基於SpringBoot+AntDesign 的快速開發平臺,JeecgBoot 2.0.2 版本...
    用戶管理│ ├─角色管理│ ├─菜單管理│ ├─權限設置(支持按鈕權限、數據權限)│ ├─表單權限(控制欄位禁用、隱藏)│ ├─部門管理│ └─字典管理│ └─樹分類字典│ └─系統公告│ └─我的組織機構├─消息中心│ ├─消息管理│ ├─模板管理├─智能化功能│ ├─代碼生成器功能(一鍵生成前後端代碼,生成後無需修改直接用,絕對是後端開發福音)│ ├─代碼生成器模板(提供4套模板
  • 【鈦晨報】阿里開源Ant Design隱藏聖誕節彩蛋遭遇開發者炮轟
    Ant Design 的核心維護人員面對用戶突如其來的質疑和吐槽,立馬做出了回應, 並提供了修復的方法: 關於 Ant Design 聖誕彩蛋,起源自 2018 年 9 月 10 日我的一次提交:add christmas easter egg · ant-design/ant-design@00aebeb,代碼實現會在 12 月 25 日當天給所有按鈕添加積雪效果
  • 《Valorant》英雄如何選擇 新手入門英雄選擇推薦
    Valorant瓦羅蘭特已經在今天開啟測試了,很多新入坑的玩家都不知道該如何選擇英雄,今天小編為大家帶來的就是瓦羅蘭特新手入門英雄選擇推薦了,內附英雄技能介紹,小夥伴們一起... Valorant英雄怎麼選?
  • 阿里開源 Ant Design 4.2.3 正式發布
    Ant Design 4.2.3 已發布,更新內容如下:• 重構 rc-progress 以解決。• 重寫了 在 create-react-app 中使用。• Drawer修復 Drawer getContainer={false} 時的高度問題。
  • Valorant內測如何參與Twitch如何觀看教程一覽
    拳頭打造的5V5戰略射擊遊戲《Valorant》於2020年4月7日開啟封測,開放地區為歐洲、加拿大、美國、俄羅斯、土耳其,國內的小夥伴想要參與內測,需要以下四個關鍵步驟:  1.Riot Games(拳頭遊戲)官網帳號註冊;  2.登錄Twitch並關聯拳頭帳號;  3.2020年4月7日晚上8點起,觀看Twitch平臺Valorant
  • Diboot 2.0.5 發布,自動化開發助理 - OSCHINA - 中文開源技術交流...
    Diboot 2.0.5 發布,自動化開發助理,為您賦能提效一、前言Diboot 2.0.5
  • 如何用純css打造類materialUI的按鈕點擊動畫並封裝成react組件
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言作為一個前端框架的重度使用者,在技術選型上也會非常注意其生態和完整性.筆者先後開發過基於vue,react,angular等框架的項目,碧如vue生態的elementUI, ant-design-vue
  • Valorant內測如何參與 Twitch如何觀看教程一覽
    趕緊就關注微信號 【kdyx91】 每日七點不見不散~】  拳頭打造的5V5戰略射擊遊戲《Valorant》於2020年4月7日開啟封測,開放地區為歐洲、加拿大、美國、俄羅斯、土耳其,國內的小夥伴想要參與內測,需要以下四個關鍵步驟:   1.Riot Games(拳頭遊戲)官網帳號註冊;   2.登錄Twitch並關聯拳頭帳號;
  • Valorant體驗服帳號密碼大全 老司機帶你搶先玩
    來源:18183 作者:曉鏑 時間:2020-06-02 Valorant體驗服帳號和密碼要如何獲取
  • Google Web Design 10.0發布:新增4項功能
    Google Web Design 10.0 今天正式發布。它是適用於 Windows、Mac 和 Linux 的 HTML5 內容生成工具,憑藉著用戶友好性和豐富的輔助功能,而成為各種 Web 內容的首選。 Google Web Design 10.0.0.1123 版本新增了 4 個方面的功能,並修正了 12 個問題。
  • Valorant
    《Valorant》總觀看時間超3.34億小時 新型冠狀病毒疫情繼續推動著流媒體觀看總時長的增長,根據 StreamElements 與 Arsenal.gg 公開的統計數據顯示,4月流媒體平臺觀看總時長較上月相比上升了45%,與去年同期相比更是增長了99%之多;其中單是 Twitch 平臺四月的觀看總時長與去年同期相比就增長了99%
  • 正式上線後的《Valorant》究竟如何?
    自從拳頭的FPS新作《Valorant(無畏契約)》公測以來,很多玩家都對其報以相當高的期待,大家都想看看這款在測試階段就打破Twitch直播觀看記錄的遊戲,正式發售後會引起怎樣的轟動。這款《Valorant(無畏契約)》究竟具不具備超越其他熱門FPS遊戲的潛質呢?今天就讓X博士帶大家來看看這款拳頭新遊究竟是個什麼模樣。