本文最初發布於 maxrozen.com 網站,經原作者授權由 InfoQ 中文站翻譯並分享。
包大小(來自 BundlePhobia):縮小後 1.2mB,縮小 +gzip 壓縮後 349.2kB,通過搖樹減少體積。優點:
AntDesign 隨附了大量支持文檔,有一個社區,包括一個帶有預製模板的單獨項目(AntDesignPro);缺點:
汙染你的 CSS(期望添加!important 以防止它樣式化你的非 Ant 組件)。其實我主要把 Bootstrap 看作是一個 UI 庫。它不會幫你贏得任何設計獎項,但可以用來完成一些邊緣項目和最小可行產品。
不過這取決於你要使用它的目的。如果你不熟悉 React,那麼它是一個很好的入門庫。對於經驗更豐富的開發人員來說,他們可能會去研究 styled-components / Emotion。
有兩個流行的庫帶有 Bootstrap 的 React 綁定,我個人僅使用 Reactstrap。
包大小(來自 BundlePhobia):縮小後 111kB,縮小 +gzip 壓縮後 34.4kB,通過搖樹減少體積包大小(來自 BundlePhobia):縮小後為 152.1kB,縮小 +gzip 壓縮後 39.4kB,通過搖樹減少體積優點:
帶有 React 綁定的 Bootstrap 庫,大家都喜歡;它已經流行了足夠長的時間了,因此不必擔心錯誤 / 問題;沒有 jQuery 依賴,因為它已在 React 中完全重新實現。缺點:
Bulma 與本文介紹的其他庫不太一樣,因為 Bulma 是純 CSS 框架,不需要 JS。你可以選擇直接使用 Bulma 中的類,也可以使用包裝庫,例如 react-bulma-components。
項目連結:react-bulma-components包大小(來自 BundlePhobia):縮小後 179kB,縮小 +gzip 壓縮 20.1kB優點:
不會讓你的網站長一副 Bootstrap 的樣子;缺點:
包大小(來自 BundlePhobia):縮小後為 326.2kB,縮小 +gzip 壓縮後為 101.2kB,通過搖樹減少體積優點:
可訪問性:遵循 WAI-ARIA 準則,組件使用 aria 標籤;缺點:
注意:
它非常接近 v1 版本,因此請注意 v0.8.0 之後的重大更改。
MaterialUI 是我又愛又恨的庫之一。過去,它幫助我扛過了一些非常緊張的項目死線,但到最後我總是儘快把它從所有角落趕走。
過去,你只能通過編寫 JSS 來自定義 MaterialUI 的樣式,但值得慶幸的是,現在可以使用 styled-components 和 Emotion 覆蓋樣式。
包大小(來自 BundlePhobia):縮小後 325.7kB,縮小 +gizp 壓縮 92kB,通過搖樹減少體積優點:
缺點:
定製起來既困難又痛苦,但卻很有必要(以改善視覺效果);你的應用看起來會像谷歌的產品(對於某些人來說,這可能代表一種專業風格)。包大小(來自 BundlePhobia):縮小後為 300.8kB,縮小 +gzip 壓縮後為 80.9kB,通過搖樹減少體積。優點:
用戶很知名(Netflix 內部使用,Amazon 發布的產品也在用)缺點:
開源項目的潛在不確定性。
查看 issue:
社區運行的 fork:
ReachUI 是一個底層組件庫,允許開發人員在其設計系統中構建可訪問的 React 組件。
沒有可用的包大小,因為每個組件都單獨導出為自己的 npm 包。
Reakit 是另一個底層組件庫。從技術上講它是一個 UI 庫,但不附帶 CSS。因此你仍然需要找到一種樣式解決方案。
包大小(來自 BundlePhobia):縮小後為 119.9kB,縮小 +gzip 壓縮後為 32.1kB,通過搖樹減少體積。我關注 Rebass 已經有一段時間了。它是一個功能強大的組件庫,沒有自帶主題,但可以輕鬆改變主題。關於它的實踐示例,請參見其演示。
在編寫這份列表時,我曾試著避免加入商業化的設計系統,但是有些系統(Material UI)已得到廣泛採用,因此沒有它們列表就不完整了。
我還特意省略了 CSS-in-JS(如 styled-components 和 Emotion)以及實用工具 CSS 系統(如 Tailwind),因為它們不是明確的「React 組件庫」,而是用來製作組件的工具。
https://maxrozen.com/guide-to-component-ui-libraries-react/
InfoQ 讀者交流群上線啦!各位小夥伴可以掃描下方二維碼,添加 InfoQ 小助手,回復關鍵字「進群」申請入群。大家可以和 InfoQ 讀者一起暢所欲言,和編輯們零距離接觸,超值的技術禮包等你領取,還有超值活動等你參加,快來加入我們吧!
點個在看少個 bug 👇