Thomas Derflinger Blog

Comparaison des meilleures bibliothèques de composants pour React

Pour chaque application web sérieuse, vous devriez choisir une bibliothèque de composants. Il existe de très bonnes bibliothèques prêtes à l’emploi, alors pourquoi réinventer la roue? Cet article compare les cinq principaux éléments bibliothèques pour React en créant un simple écran de connexion.

Material UI

Le Material Design est un langage de conception développé par Google en 2014. Google l’utilise dans le système d’exploitation Android et dans son propre produits.

Material UI met en œuvre la conception des matériaux pour réagir. Il s’agit d’une bibliothèque React très populaire, soutenue par une société basée à Paris. Pour le stylisme, la bibliothèque utilise sa propre solution CSS-in-JS et des styled-components. Il a également la possibilité d’adapter le thème. Dans l’ensemble, c’est une bibliothèque puissante et si vous aimez le Material Design vous obtiendrez une solution complète pour développer vos produits.

Capture d'écran de Material UI

// taken from https://github.com/mui-org/material-ui/tree/master/docs/src/pages/getting-started/templates/sign-in

import React from 'react'
import Avatar from '@material-ui/core/Avatar'
import Button from '@material-ui/core/Button'
import CssBaseline from '@material-ui/core/CssBaseline'
import TextField from '@material-ui/core/TextField'
import LockOutlinedIcon from '@material-ui/icons/LockOutlined'
import Typography from '@material-ui/core/Typography'
import { makeStyles } from '@material-ui/core/styles'
import Container from '@material-ui/core/Container'

const useStyles = makeStyles(theme => ({
  paper: {
    marginTop: theme.spacing(8),
    display: 'flex',
    flexDirection: 'column',
    alignItems: 'center',
  },
  avatar: {
    margin: theme.spacing(1),
    backgroundColor: theme.palette.secondary.main,
  },
  form: {
    width: '100%', // Fix IE 11 issue.
    marginTop: theme.spacing(1),
  },
  submit: {
    margin: theme.spacing(3, 0, 2),
  },
}))

export default function SignIn() {
  const classes = useStyles()

  return (
    <Container component="main" maxWidth="xs">
      <CssBaseline />
      <div className={classes.paper}>
        <Avatar className={classes.avatar}>
          <LockOutlinedIcon />
        </Avatar>
        <Typography component="h1" variant="h5">
          Sign in
        </Typography>
        <form className={classes.form} noValidate>
          <TextField
            variant="outlined"
            margin="normal"
            required
            fullWidth
            id="email"
            label="Email Address"
            name="email"
            autoComplete="email"
            autoFocus
          />
          <TextField
            variant="outlined"
            margin="normal"
            required
            fullWidth
            name="password"
            label="Password"
            type="password"
            id="password"
            autoComplete="current-password"
          />
          <Button
            type="submit"
            fullWidth
            variant="contained"
            color="primary"
            className={classes.submit}
          >
            Sign In
          </Button>
        </form>
      </div>
    </Container>
  )
}

Fluent UI React

Fluent est un logiciel libre et multiplateforme système créé par Microsoft. Fluent UI React est l’implémentation du système Fluent pour les développeurs web React. Le site web de Fluent UI React contient une bonne documentation avec des recommandations de bonnes pratiques. Il y a également un support de premier ordre pour TypeScript. Pour les thèmes, il existe un site web de Fluent UI Theme Designer où vous pouvez personnaliser votre thème de manière interactive.

En général, si vous aimez le design, il n’y a rien de mal à utiliser Fluent UI.

Capture d'écran de Fluent UI

import * as React from 'react'
import { Card } from '@uifabric/react-cards'
import { TextField } from 'office-ui-fabric-react/lib/TextField'
import { Text } from 'office-ui-fabric-react'
import { PrimaryButton } from 'office-ui-fabric-react'

const Login = () => {
  const cardTokens = { childrenMargin: 20, width: 500, maxWidth: 400 }

  return (
    <Card
      aria-label="Basic vertical card"
      tokens={cardTokens}
      style={{
        marginLeft: 'auto',
        marginRight: 'auto',
        marginTop: '10rem',
      }}
    >
      <Card.Section>
        <Text
          block
          variant="xLarge"
          style={{ textAlign: 'left', marginBottom: '2rem' }}
        >
          Sign In
        </Text>
        <TextField underlined placeholder="Email address" />
        <TextField underlined type="password" placeholder="Password" />
        <PrimaryButton text="SIGN IN" style={{ marginTop: '3rem' }} />
      </Card.Section>
    </Card>
  )
}

export default Login

Ant Design

Le système de conception par Ant Financial, une grande société financière chinoise est en source ouverte. Ant Financial est affiliée à la grande société de commerce électronique Alibaba. De nombreuses autres grandes entreprises chinoises de l’internet, comme Tencent et Baidu, utilisent également ce système de conception.

La bibliothèque Ant Design est complète et comporte un grand choix de composants. La documentation est bonne, mais certaines pages sont encore uniquement en chinois. TypeScript est supporté et la thématisation est possible avec les variables Less.

Cette bibliothèque est sûre de rester dans le coin car elle est soutenue par les principaux Les entreprises chinoises de l’internet.

Ant Design screenshot

import React from 'react'
import { Card } from 'antd'
import { Input } from 'antd'
import { UserOutlined } from '@ant-design/icons'
import { LockOutlined } from '@ant-design/icons'
import { Button } from 'antd'

const Login = () => {
  return (
    <>
      <Card
        title="Login"
        style={{
          width: 300,
          marginLeft: 'auto',
          marginRight: 'auto',
          marginTop: '5rem',
        }}
      >
        <Input placeholder="Email Address" prefix={<UserOutlined />} />
        <Input
          placeholder="Password"
          type="password"
          style={{ marginTop: '1.5rem' }}
          prefix={<LockOutlined />}
        />
        <Button type="primary" style={{ width: '100%', marginTop: '1.5rem' }}>
          SIGN IN
        </Button>
      </Card>
    </>
  )
}

export default Login

React Spectrum

Adobe a créé un système de conception open source appelé Spectrum. En tant que développeur de logiciels de conception bien connus comme PhotoShop et Illustrator, il a mis l’accent sur la qualité de la conception.

Et cela transparaît dans le fait que Spectrum se distingue des autres systèmes de conception par son aspect rafraîchissant. On peut percevoir un sentiment d’harmonie dans la composition des composants.

La mise en œuvre de Spectrum s’appelle React Spectrum. React Spectrum met l’accent sur l’accessibilité que tous les composants prennent en charge. La documentation est très complète et React Spectrum offre également un soutien à l’internationalisation. Il existe également React Stately, une collection de React hooks pour la gestion du système de conception. La thématisation est prise en charge ainsi qu’un mode d’obscurcissement automatique.

Au moment de la rédaction du présent document, certains composants (comme la combobox) sont encore en version alpha et non publiée. Mais cela devrait changer rapidement.

React Spectrum correspond parfaitement aux applications web qui veulent se distinguer par leur design.

Spectrum screenshot

import React from 'react'
import { Flex, Heading, View, TextField, Button } from '@adobe/react-spectrum'

const Login = () => {
  return (
    <Flex
      direction="column"
      justifyContent="center"
      alignItems="center"
      height={window.innerHeight + 'px'}
    >
      <View
        borderWidth="thin"
        borderColor="dark"
        borderRadius="medium"
        padding="size-250"
        width="300px"
      >
        <Heading level={2}>Sign In</Heading>
        <TextField label="Email Address" placeholder="[email protected]" />
        <TextField label="Password" type="password" />
        <Button variant="cta" marginTop="size-130">
          SIGN IN
        </Button>
      </View>
    </Flex>
  )
}

export default Login

Semantic UI React

Semantic UI React a tout ce que vous pouvez attendre d’une bibliothèque de composants. Elle comporte plus de 50 composants et un bon concept de thème. En tant que projet communautaire, il dépend des contributions. Il est donc bon de savoir qu’il est toujours actif.

Semantic UI screenshot

Login.js

import React, { useState } from 'react'
import { Grid, Form, Segment, Button, Header, Message } from 'semantic-ui-react'

const Login = () => {
  return (
    <>
      <Grid
        textAlign="center"
        verticalAlign="middle"
        style={{ marginTop: '7rem' }}
      >
        <Grid.Column style={{ maxWidth: 450 }}>
          <Header as="h2" icon color="blue" textAlign="center">
            Sign In
          </Header>
          <Form size="large">
            <Segment stacked>
              <Form.Input
                fluid
                name="email"
                icon="mail"
                iconPosition="left"
                placeholder="Email address"
              />
              <Form.Input
                fluid
                name="password"
                type="password"
                icon="lock"
                iconPosition="left"
                placeholder="Password"
              />
              <Button color="blue" fluid size="large">
                SIGN IN
              </Button>
            </Segment>
          </Form>
          <Message>
            Not a user? <a href="register">Register here.</a>
          </Message>
        </Grid.Column>
      </Grid>
    </>
  )
}

export default Login

Conclusion

Les goûts en matière de design sont différents, donc en utilisant l’un des systèmes de design des grandes entreprises, vous êtes bon. L’avenir de Semantic UI React dépend de la communauté qui est active aujourd’hui. Donc si vous voulez soutenir un projet indépendant, Semantic UI React est le choix qu’il vous faut.

J’espère que cet article vous facilitera un peu le choix d’une bibliothèque de composants appropriée.

Références

Material Design: https://material.io

Fluent Design: https://www.microsoft.com/design/fluent/

Spectrum: https://spectrum.adobe.com/

Ant Design: https://ant.design/

Semantic UI: https://semantic-ui.com/

Publié le 5 août 2020

Thomas Derflinger

Thomas Derflinger

Je suis entrepreneur indépendant et développeur de logiciels.

Web est un sujet que j'aime beaucoup. Prenons contact!