UI Development

Storybook

Storybook ist eine Werkstatt für UI-Komponenten. Entwickeln und testen Sie diese isoliert, dokumentieren Sie jeden Zustand und finden Sie Accessibility- sowie visuelle Regressionen, bevor sie die Nutzer erreichen.

intermediate12 min readUpdated 15. Sept. 2026
Button.stories.jsx
jsx
// Button.stories.jsx
import { Button } from "./Button";

export default {
  title: "Components/Button",
  component: Button,
  args: { children: "Save" },
};

export const Primary = {
  args: { variant: "primary" },
};

export const Disabled = {
  args: { disabled: true },
};
Was es ist
Eine Komponenten-Werkstatt
Arbeitseinheit
Eine Story
Inputs
Args und Controls
Dokumentation
Autodocs
Testing
Interaction- und a11y-Addons
Frameworks
React, Vue, Svelte, Angular

Warum es wichtig ist

Warum Teams Storybook einsetzen

Isoliert entwickeln

Entwickeln und prüfen Sie eine Komponente für sich, ohne die gesamte App starten oder zur entsprechenden Seite navigieren zu müssen.

a11y-Probleme frühzeitig finden

Das Accessibility-Addon prüft jede Story und meldet Verstöße während der Arbeit, bevor sie die Nutzer erreichen.

Jeden Zustand testen

Definieren Sie Loading-, Empty-, Error- und Edge-Cases als Stories und führen Sie Interaction- und visuelle Prüfungen darüber aus.

Das Gesamtbild

Die drei Kernideen hinter Storybook

Stories als isolierte Zustände, Args als Live-Inputs und Addons, die die Werkstatt um Testing und Dokumentation erweitern.

Stories

Zustände

Jede Story rendert eine Komponente in einem aussagekräftigen Zustand, mit einem Namen, der ihren Zweck dokumentiert.

Args

Inputs

Die Props, die eine Story übergibt, live editierbar über das Controls-Panel.

Addons

Erweiterung

Accessibility, Interaction Testing, visuelle Regression und Dokumentation werden in dieselbe Werkstatt integriert.

Storybook auf einen Blick

Das Herzstück von Storybook

Story-Dateien

Platzieren Sie eine .stories-Datei direkt bei der Komponente und exportieren Sie pro Zustand eine Story.

Args

Definieren Sie Standard-Props auf Meta-Ebene und überschreiben Sie diese pro Story.

Controls

Passen Sie Args live in der UI an, um eine Komponente zu erkunden, ohne Code zu ändern.

Decorators

Umschließen Sie Stories mit Providern, Themes oder Layouts für einen konsistenten Kontext.

Interaction Tests

Play-Funktionen simulieren Klicks und Tastatureingaben und prüfen anschließend das Ergebnis.

Accessibility Addon

Automatische Audits jeder Story auf gängige Verstöße.

Eine kurze Geschichte

Vom internen Tool zum Industriestandard

  1. 2016

    Storybook veröffentlicht

    Ein React-spezifisches Tool zur isolierten Entwicklung von Komponenten.

    16
  2. 2018

    Framework-Support

    Vue, Angular und andere erhalten offiziellen Support, während die Verbreitung wächst.

    18
  3. 2020

    Args und Controls

    Ein einfacheres Story-Format mit live-editierbaren Props wird zum Standard.

    20
  4. 2022

    Interaction Testing

    Play-Funktionen und der Test Runner bringen das Testing direkt in die Werkstatt.

    22
  5. Heute

    Ein Industriestandard

    Wird für Dokumentation, Accessibility-Checks und visuelle Regression in großen Design-Systemen eingesetzt.

    Heute

Der vollständige Leitfaden

Storybook: Alles was Sie wissen müssen

Was ist Storybook?

Storybook ist eine Werkstatt für UI-Komponenten. Es rendert eine Komponente isoliert, außerhalb Ihrer Anwendung, sodass Sie diese entwickeln können, ohne mühsam zur richtigen Seite navigieren oder bestimmte Bedingungen erfüllen zu müssen. Jeder Zustand, der für Sie relevant ist, wird zu einer Story, und die Sammlung dieser Stories wird zu einer lebendigen Dokumentation.

Was als reines Entwicklungstool begann, hat sich zu weit mehr entwickelt: einem Tool für Accessibility-Audits, einer Oberfläche für Interaktionstests und einem Ziel für Visual-Regression-Tests. Für Teams, die Design-Systeme oder gemeinsame Komponenten-Bibliotheken erstellen, ist es oft das wertvollste Front-End-Tool überhaupt, direkt nach dem verwendeten Framework.

Stories

Eine Story-Datei exportiert ein Standard-Meta-Objekt sowie einen benannten Export pro Zustand.

// Button.stories.jsx
import { Button } from "./Button";

export default {
  title: "Components/Button",
  component: Button,
  args: { children: "Save" },
  argTypes: {
    variant: {
      control: "select",
      options: ["primary", "secondary", "ghost"],
    },
  },
};

export const Primary = {
  args: { variant: "primary" },
};

export const Secondary = {
  args: { variant: "secondary" },
};

export const Disabled = {
  args: { disabled: true },
};

Das title bestimmt, wo die Komponente in der Sidebar erscheint. Das component verknüpft die Story mit der Komponente, sodass Storybook die Props ableiten und die Dokumentation generieren kann. Jeder benannte Export ist eine Story.

Args und Controls

Args sind die Props, die eine Story an die Komponente übergibt. Storybook wandelt diese in ein Controls-Panel um, sodass du Werte live ändern kannst, ohne den Code bearbeiten zu müssen.

// Card.stories.jsx
export default {
  title: "Components/Card",
  component: Card,
  args: {
    title: "Pro plan",
    description: "Everything you need to ship.",
    elevated: false,
  },
};

Da Args strukturierte Daten sind, steuern sie auch die Autodocs, können zwischen Stories geteilt und in Interaktionstests wiederverwendet werden. Das Definieren von Markup inline in einer render-Funktion funktioniert zwar, führt aber zum Verlust der Live-Controls und der „Single Source of Truth“ – daher solltest du Args bevorzugen.

Decorators und Kontext

Einige Komponenten benötigen einen Provider, ein Theme oder einen Layout-Wrapper. Decorators stellen diesen Kontext rund um eine Story bereit.

// preview.jsx
export default {
  decorators: [
    (Story) => (
      <ThemeProvider theme="dark">
        <div style={{ padding: "1rem" }}>
          <Story />
        </div>
      </ThemeProvider>
    ),
  ],
};

Ein Decorator kann global, pro Datei oder pro Story definiert werden. Das macht es einfach, eine Komponente in verschiedenen Themes oder Locales zu prüfen, ohne die Komponente selbst ändern zu müssen.

Autodocs

Storybook kann automatisch eine Dokumentationsseite aus deinen Stories und deren Args generieren. Wenn Autodocs aktiviert ist, erhält jede Komponente eine Seite, auf der die Props, Controls und jede einzelne Story aufgelistet werden. Diese bleibt automatisch synchron, da sie aus derselben Quelle generiert wird. Du kannst die Seite mithilfe der parameters.docs API mit Beschreibungen, Nutzungshinweisen und Code-Beispielen anreichern.

Interaktionstests

Eine Story kann eine play function definieren, die nach dem Rendern der Komponente ausgeführt wird. Sie verwendet dieselben Queries und Events wie Testing Library, sodass das mentale Modell direkt übertragbar ist.

// Search.stories.jsx
import { expect, userEvent, within } from "@storybook/test";

export const TypesAndSubmits = {
  play: async ({ canvasElement }) => {
    const canvas = within(canvasElement);

    await userEvent.type(canvas.getByLabelText("Search"), "vitest");
    await userEvent.click(canvas.getByRole("button", { name: "Go" }));

    await expect(canvas.getByText("3 results")).toBeVisible();
  },
};

Da der Test innerhalb von Storybook läuft, können Sie ihn Schritt für Schritt beobachten, was das Debugging wesentlich einfacher macht als bei einem fehlgeschlagenen CI-Run. Dieselben Stories können in der CI mit dem Storybook test runner headless ausgeführt werden.

Barrierefreiheit und visuelles Testing

Das Accessibility-Addon führt axe für jede Story aus und meldet Verstöße im Addon-Panel, gruppiert nach ihrer Auswirkung. Es erkennt fehlende Labels, schlechte Kontraste, ungültiges ARIA und ähnliche Probleme bereits während der Entwicklung, was wesentlich kostengünstiger ist, als diese später zu beheben.

Tools für visuelle Regression erstellen pro Story einen Screenshot und vergleichen diesen mit einem Baseline-Bild. Da jeder Zustand bereits als Story existiert, erhalten Sie eine umfassende visuelle Abdeckung mit minimalem Mehraufwand. Ein geänderter Screenshot markiert eine unbeabsichtigte visuelle Änderung zur Überprüfung.

Wo Storybook ins Spiel kommt

Storybook positioniert sich zwischen Unit-Tests und End-to-End-Tests. Es ist kein Ersatz für keines von beidem. Nutze es, um Komponenten isoliert zu entwickeln und zu dokumentieren, interaktive Zustände mit Play-Funktionen zu testen sowie die Barrierefreiheit und das visuelle Design zu prüfen. Behalte schnelle Logik-Tests in Vitest, das Komponentenverhalten in Testing Library und vollständige User Journeys in Playwright.

Best Practices

  • Schreiben Sie pro bedeutsamem Zustand eine Story, einschließlich Loading-, Empty- und Error-States.
  • Bevorzugen Sie args gegenüber Inline-Markup, damit Controls und Dokumentation präzise bleiben.
  • Platzieren Sie Stories direkt bei ihren Komponenten (Colocation) und benennen Sie diese nach ihrem Verwendungszweck.
  • Nutzen Sie Decorators für Provider, Themes und Layouts, anstatt Wrapper zu duplizieren.
  • Fügen Sie play functions für Interaktionen hinzu und lassen Sie diese in der CI ausführen.
  • Aktivieren Sie das Accessibility-Addon und beheben Sie Verstöße, sobald sie auftreten.
  • Veröffentlichen Sie das gebaute Storybook als lebendige Dokumentation.

Häufige Fehler

  • Nur eine „Default“-Story schreiben und reale Zustände vernachlässigen.
  • Props in render hartcodieren und dadurch Controls und Dokumentation verlieren.
  • Storybook als Ersatz für Unit- oder End-to-End-Tests betrachten.
  • Stories zulassen, die von den tatsächlichen Props der Komponente abweichen.
  • Accessibility-Warnungen ignorieren, bis sie sich aufstauen.
  • Das Provider-Setup in jeder Story duplizieren, anstatt einen Decorator zu verwenden.

Wie geht es weiter?

Storybook verwandelt Komponenten in einen dokumentierten und testbaren Katalog. Kombinieren Sie es mit Testing Library für die Queries innerhalb von play functions, Vitest für Logik-Tests und Playwright für End-to-End-Flows. Wählen Sie anschließend Ihre am häufigsten verwendete Komponente aus und erstellen Sie Stories für jeden möglichen Zustand.

Definition von Story-Inputs

Args steuern Controls und Dokumentation. Hardcodiertes JSX dupliziert Markup und kann nicht live angepasst werden.

Bevorzugt
export const Large = {
  args: {
    size: "large",
    children: "Save",
  },
};
Vermeiden
export const Large = {
  render: () => (
    <Button size="large">
      Save
    </Button>
  ),
};

Abdeckung von Zuständen

Eine Story pro aussagekräftigem Zustand dokumentiert die Komponente und bietet eine Basis für Tests.

Bevorzugt
export const Loading = {
  args: { state: "loading" },
};
export const Empty = {
  args: { state: "empty" },
};
export const Error = {
  args: { state: "error" },
};
Vermeiden
export const Default = {
  args: { state: "ready" },
};
// every other state lives
// only in the real app

Häufig gestellte Fragen

Häufig gestellte Fragen

Keep learning

Related topics from the roadmap.

$ Lernen Sie jetzt

Bereit, Storybook zu lernen?

Unser interaktives Tutorial führt Sie Schritt für Schritt durch Storybook — mit Quizzen und echtem Code, den Sie im Browser ausführen können.