React has a component library; the component library is a design plan that organizes components together to build through multi-dimensional combinations; component design is through the disassembly, induction, and reorganization of elements in functions and visual expressions, and is based on reusable The purpose is to form standardized components. Commonly used component libraries for react include Bulma, AntDesign, Bootstrap, etc.
The operating environment of this tutorial: Windows 10 system, react version 17.0.1, Dell G3 computer.
Component design is to disassemble, summarize, and reorganize elements in functions and visual expressions, and form standardized components based on the purpose of reuse. The entire design plan is constructed through multi-dimensional combination, and these components are organized together. A component library is formed.
Commonly used react component libraries:
Ant Design
Project link: Ant Design
Bundle size (from BundlePhobia): 1.2mB after minification, 349.2kB after minification + gzip compression, reduce the size by tree shaking.
advantage:
AntDesign comes with extensive support documentation, has a community, including a separate project (AntDesignPro) with pre-made templates;
UI library that can be used to quickly design backend/internal applications.
shortcoming:
lack of accessibility;
It is large and is expected to have a large impact on performance;
Pollute your CSS (expect to add !important to prevent it from styling your non-Ant components).
Bootstrap
In fact, I mainly think of Bootstrap as a UI library. It won’t win you any design awards, but it can be used to complete some edge projects and minimum viable products.
But it depends on what you want to use it for. If you're new to React, it's a great library to get started with. For more experienced developers, they might look into styled-components/Emotion.
There are two popular libraries with React bindings for Bootstrap, I personally only use Reactstrap.
Project link: React Bootstrap
Bundle size (from BundlePhobia): 111kB after minification, 34.4kB after minification + gzip, reduce the size by tree shaking
Project link: Reactstrap
Bundle size (from BundlePhobia): 152.1kB after minification, 39.4kB after minification + gzip compression, reduce the size by tree shaking
advantage:
The Bootstrap library with React bindings that everyone loves;
Easily customizable via CSS-in-JS;
It's been around long enough that you don't have to worry about bugs/issues;
Get started quickly;
There is no jQuery dependency as it has been completely re-implemented in React.
shortcoming:
This is Bootstrap: if you don't customize it, your site will look like any other.
Bulma
Bulma is different from the other libraries introduced in this article because Bulma is a pure CSS framework and does not require JS. You can choose to use classes from Bulma directly, or use a wrapper library such as react-bulma-components.
Project link: Bulma
Project link: react-bulma-components
Bundle size (from BundlePhobia): 179kB minified, 20.1kB minified + gzip compressed
advantage:
It won’t make your website look like Bootstrap;
Perfect for getting up and running quickly;
Modern features (underlying Flexbox/Grid).
shortcoming:
Accessibility: There are some, but not as strict as other libraries that adhere to WCAG guidelines.
Chakra UI
Project link: ChakraUI
Package size (from BundlePhobia): 326.2kB after minification, 101.2kB after minification + gzip compression, reduce the size by tree shaking
advantage:
Accessibility: Following WAI-ARIA guidelines, components use aria tags;
Powered by Discord server;
Easy to customize (with theme support);
Highly modular, so tree shaking will actually remove code you don't use.
shortcoming:
Quite new.
Notice:
It is very close to v1, so please be aware of breaking changes after v0.8.0.
Material UI
MaterialUI is one of my love-hate libraries. It's helped me get through some very stressful project deadlines in the past, but in the end I always got it out of the way as quickly as possible.
In the past, you could only customize MaterialUI's styles by writing JSS, but thankfully you can now override styles using styled-components and Emotion.
Project link: Material UI
Bundle size (from BundlePhobia): 325.7kB minified, 92kB minified + gizp compressed, reduced by tree shaking
advantage:
Complete documentation
The icon library is huge
Simple and easy to use (situation at the beginning)
shortcoming:
Difficult and painful to customize, but necessary (to improve visuals);
Performance: too many DOM nodes will be rendered;
Your app will look like a Google product (for some, this may represent a professional look).
Semantic UI
Project link: Semantic UI
Semantic-UI-React
Package size (from BundlePhobia): 300.8kB after minification, 80.9kB after minification + gzip compression, reduce the size by tree shaking.
advantage:
Composable (pass components using as prop)
Easy to customize
Useful documentation
The user is well known (used internally by Netflix and used by products released by Amazon)
TypeScript support
shortcoming:
Potential uncertainty of open source projects.
View issue:
https://github.com/Semantic-Org/Semantic-UI/issues/6109
https://github.com/Semantic-Org/Semantic-UI/issues/6413
Community-run fork:
https://github.com/fomantic/Fomantic-UI
Honorable Mention
Reach UI
ReachUI is a low-level component library that allows developers to build accessible React components into their design systems.
There is no package size available because each component is exported individually as its own npm package.
Reakit
Reakit is another low-level component library. Technically it's a UI library, but it doesn't come with CSS. So you still need to find a styling solution.
Package size (from BundlePhobia): 119.9kB after minification, 32.1kB after minification + gzip compression, reduce the size by tree shaking.
Rebass
I've been following Rebass for a while. It is a powerful component library that does not come with a theme, but you can easily change the theme. For an example of it in action, see its demo.
Project link: Rebass
Bundle size (from BundlePhobia): 43kB after minification, 14.4kB after minification +gizp compression, reduce the size by tree shaking.