Zum Inhalt springen
React Anfänger 25 min

UI-Bibliotheken nutzen

Lerne populäre React UI-Bibliotheken kennen: Material UI, Chakra UI und shadcn/ui. Beschleunige deine Entwicklung mit fertigen Komponenten.

Aktualisiert:

UI-Bibliotheken nutzen

Warum Buttons, Modals und Tabellen von Grund auf neu bauen, wenn es hervorragende UI-Bibliotheken gibt? Sie bieten fertige, barrierefreie und gestylte Komponenten, die du direkt in dein Projekt einbauen kannst.

Warum UI-Bibliotheken?

VorteilBeschreibung
ZeitersparnisFertige Komponenten statt alles selbst bauen
BarrierefreiheitEingebaute Accessibility (a11y)
Konsistentes DesignEinheitliche Optik ueber die gesamte App
ResponsiveMobil-optimiert out of the box
GetestetVon der Community geprueft und verbessert

Material UI (MUI)

Material UI ist die beliebteste React-UI-Bibliothek, basierend auf Googles Material Design.

Installation

npm install @mui/material @emotion/react @emotion/styled

Grundlegende Verwendung

import { Button, TextField, Card, CardContent, Typography } from '@mui/material';

function LoginForm() {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');

  return (
    <Card sx={{ maxWidth: 400, margin: '2rem auto', padding: 2 }}>
      <CardContent>
        <Typography variant="h5" gutterBottom>
          Anmelden
        </Typography>
        <TextField
          fullWidth
          label="E-Mail"
          type="email"
          value={email}
          onChange={(e) => setEmail(e.target.value)}
          margin="normal"
        />
        <TextField
          fullWidth
          label="Passwort"
          type="password"
          value={password}
          onChange={(e) => setPassword(e.target.value)}
          margin="normal"
        />
        <Button
          fullWidth
          variant="contained"
          size="large"
          sx={{ mt: 2 }}
        >
          Einloggen
        </Button>
      </CardContent>
    </Card>
  );
}

MUI-Komponenten im Ueberblick

import {
  AppBar, Toolbar, IconButton,
  Drawer, List, ListItem,
  Grid, Container, Box,
  Chip, Avatar, Badge,
  Dialog, Snackbar, Alert,
  Table, TableHead, TableBody, TableRow, TableCell
} from '@mui/material';

function Dashboard() {
  return (
    <Container maxWidth="lg">
      <Grid container spacing={3}>
        <Grid item xs={12} md={6}>
          <Card>
            <CardContent>
              <Typography variant="h6">Benutzer</Typography>
              <Chip label="42 aktiv" color="success" />
            </CardContent>
          </Card>
        </Grid>
        <Grid item xs={12} md={6}>
          <Card>
            <CardContent>
              <Typography variant="h6">Bestellungen</Typography>
              <Chip label="128 heute" color="primary" />
            </CardContent>
          </Card>
        </Grid>
      </Grid>
    </Container>
  );
}

shadcn/ui

shadcn/ui ist ein moderner Ansatz: Statt eine Bibliothek zu installieren, kopierst du Komponenten in dein Projekt. Du hast volle Kontrolle ueber den Code.

Setup

npx shadcn@latest init

Komponenten hinzufuegen

npx shadcn@latest add button
npx shadcn@latest add card
npx shadcn@latest add input

Verwendung

import { Button } from '@/components/ui/button';
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';
import { Input } from '@/components/ui/input';

function ProfileCard() {
  return (
    <Card className="w-96">
      <CardHeader>
        <CardTitle>Profil bearbeiten</CardTitle>
      </CardHeader>
      <CardContent className="space-y-4">
        <Input placeholder="Name" />
        <Input placeholder="E-Mail" type="email" />
        <div className="flex gap-2">
          <Button variant="outline">Abbrechen</Button>
          <Button>Speichern</Button>
        </div>
      </CardContent>
    </Card>
  );
}

Warum shadcn/ui?

VorteilBeschreibung
Volle KontrolleCode liegt in deinem Projekt
Keine AbhaengigkeitKeine npm-Pakete zu aktualisieren
AnpassbarAendere den Code wie du willst
Tailwind-basiertNutzt Tailwind CSS fuer Styling
Kopieren statt installierenNur die Komponenten, die du brauchst

Chakra UI

Chakra UI bietet ein hervorragendes Developer-Erlebnis mit einem prop-basierten Styling-System:

npm install @chakra-ui/react @emotion/react @emotion/styled
import { ChakraProvider, Box, Heading, Text, Button, Stack, Input } from '@chakra-ui/react';

function App() {
  return (
    <ChakraProvider>
      <Box maxW="md" mx="auto" mt={8} p={6} borderWidth={1} borderRadius="lg">
        <Heading size="lg" mb={4}>Kontakt</Heading>
        <Stack spacing={4}>
          <Input placeholder="Dein Name" />
          <Input placeholder="Deine E-Mail" type="email" />
          <Button colorScheme="blue" size="lg">
            Nachricht senden
          </Button>
        </Stack>
      </Box>
    </ChakraProvider>
  );
}

Vergleich der Bibliotheken

KriteriumMUIshadcn/uiChakra UI
Komponenten50+40+40+
Stylingsx-Prop / ThemeTailwindProps
Bundle-GroesseGrossMinimalMittel
AnpassbarkeitTheme-SystemVoller Code-ZugriffTheme-System
LernkurveMittelNiedrigNiedrig
CommunitySehr grossWachsendGross
TypeScriptJaJaJa

Die richtige Bibliothek waehlen

Waehle MUI wenn:

  • Du ein umfassendes Komponentenset brauchst
  • Material Design zu deinem Projekt passt
  • Du ein Enterprise-Projekt baust

Waehle shadcn/ui wenn:

  • Du volle Kontrolle ueber den Code willst
  • Du bereits Tailwind CSS verwendest
  • Du ein individuelles Design brauchst

Waehle Chakra UI wenn:

  • Du schnell prototypen willst
  • Du ein einfaches API bevorzugst
  • Du Wert auf Barrierefreiheit legst

Praktisches Beispiel: Dashboard mit MUI

import {
  Container, Grid, Card, CardContent,
  Typography, LinearProgress, Box
} from '@mui/material';

function StatCard({ title, value, progress, color }) {
  return (
    <Card>
      <CardContent>
        <Typography color="text.secondary" gutterBottom>
          {title}
        </Typography>
        <Typography variant="h4" component="div">
          {value}
        </Typography>
        <Box sx={{ mt: 2 }}>
          <LinearProgress
            variant="determinate"
            value={progress}
            color={color}
          />
        </Box>
      </CardContent>
    </Card>
  );
}

function Dashboard() {
  return (
    <Container maxWidth="lg" sx={{ mt: 4 }}>
      <Typography variant="h4" gutterBottom>Dashboard</Typography>
      <Grid container spacing={3}>
        <Grid item xs={12} sm={6} md={3}>
          <StatCard title="Besucher" value="1.234" progress={75} color="primary" />
        </Grid>
        <Grid item xs={12} sm={6} md={3}>
          <StatCard title="Umsatz" value="5.678 Euro" progress={60} color="success" />
        </Grid>
        <Grid item xs={12} sm={6} md={3}>
          <StatCard title="Bestellungen" value="89" progress={45} color="warning" />
        </Grid>
        <Grid item xs={12} sm={6} md={3}>
          <StatCard title="Retouren" value="12" progress={15} color="error" />
        </Grid>
      </Grid>
    </Container>
  );
}

Uebungen

  1. Installiere MUI und baue eine Login-Seite mit TextField, Button und Card
  2. Erstelle ein Dashboard mit StatCards in einem responsiven Grid
  3. Probiere shadcn/ui und baue dieselbe Login-Seite – vergleiche den Ansatz mit MUI

Was kommt als Naechstes?

Du kennst jetzt die wichtigsten UI-Bibliotheken. Im naechsten Kapitel geht es um React Router – damit gibst du deiner App Navigation mit verschiedenen Seiten.

Zusammenfassung

  • UI-Bibliotheken sparen enorm viel Zeit und bieten barrierefreie Komponenten
  • Material UI ist der Klassiker mit dem groessten Komponentenset
  • shadcn/ui gibt dir volle Kontrolle durch kopierbaren Code
  • Chakra UI bietet ein elegantes, prop-basiertes Styling-System
  • Waehle die Bibliothek basierend auf Projektanforderungen und Team-Praeferenzen

Pro-Tipp: Du musst nicht die gesamte Bibliothek verwenden! Die meisten UI-Bibliotheken unterstuetzen Tree-Shaking – importiere nur die Komponenten, die du brauchst. So bleibt dein Bundle klein. Und fuer Lernprojekte ist es oft besser, Komponenten selbst zu bauen, um das Verstaendnis zu vertiefen!

Zurück zum React Kurs