UI Development

Storybook

Storybook est un atelier pour composants UI. Construisez-les et testez-les en isolation, documentez chaque état et détectez les régressions visuelles et d'accessibilité avant qu'elles n'atteignent les utilisateurs.

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 },
};
Qu'est-ce que c'est
Un atelier de composants
Unité de travail
Une story
Entrées
args et controls
Docs
Autodocs
Tests
Addons d'interaction et a11y
Frameworks
React, Vue, Svelte, Angular

Pourquoi c'est important

Pourquoi les équipes adoptent Storybook

Développement en isolation

Développez et examinez un composant seul, sans avoir à lancer toute l'application ou à naviguer jusqu'à la bonne page.

Détection précoce des problèmes d'a11y

L'addon d'accessibilité audite chaque story et signale les violations pendant que vous travaillez, avant qu'elles n'atteignent les utilisateurs.

Test de chaque état

Encodez les cas de chargement, les états vides, les erreurs et les cas limites sous forme de stories, puis effectuez des vérifications visuelles et d'interaction.

Le tableau complet

Les trois piliers de Storybook

Les stories comme états isolés, les args comme entrées dynamiques, et les addons qui étendent l'atelier vers les tests et la documentation.

Stories

États

Chaque story rend un composant dans un état significatif, avec un nom qui documente son objectif.

Args

Entrées

Les props passées par une story, modifiables en direct via le panneau de controls.

Addons

Extension

L'accessibilité, les tests d'interaction, la régression visuelle et la documentation s'intègrent au même atelier.

Storybook en un coup d'œil

Le cœur de Storybook

Fichiers de story

Colocalisez un fichier .stories avec le composant et exportez une story par état.

Args

Définissez des props par défaut au niveau meta et surchargez-les par story.

Controls

Ajustez les args en direct dans l'UI pour explorer un composant sans modifier le code.

Decorators

Enveloppez les stories avec des providers, des thèmes ou une mise en page pour un contexte cohérent.

Tests d'interaction

Les fonctions play simulent des clics et de la saisie, puis vérifient le résultat.

Addon d'accessibilité

Audits automatiques de chaque story pour détecter les violations courantes.

Un bref aperçu

D'un outil interne à un standard de l'industrie

  1. 2016

    Sortie de Storybook

    Un outil spécifique à React pour développer des composants en isolation.

    16
  2. 2018

    Support multi-frameworks

    Vue, Angular et d'autres bénéficient d'un support officiel à mesure que l'adoption croît.

    18
  3. 2020

    Args et Controls

    Un format de story plus simple avec des props modifiables en direct devient la norme.

    20
  4. 2022

    Tests d'interaction

    Les fonctions play et le test runner intègrent les tests directement dans l'atelier.

    22
  5. Aujourd'hui

    Un standard de l'industrie

    Utilisé pour la documentation, les vérifications d'accessibilité et la régression visuelle dans les grands design systems.

    Aujourd'hui

Le guide complet

Storybook: Tout ce que vous devez savoir

Qu’est-ce que Storybook ?

Storybook est un atelier pour composants UI. Il rend un composant de manière isolée, en dehors de votre application, ce qui vous permet de le développer sans avoir à naviguer vers la bonne page ou à remplir des conditions spécifiques. Chaque état important devient une story, et l’ensemble de ces stories constitue une documentation vivante.

Initialement conçu comme un outil de développement, Storybook a évolué pour devenir bien plus : un auditeur d’accessibilité, une surface de test d’interaction et une cible pour les tests de régression visuelle. Pour les équipes qui créent des design systems ou des bibliothèques de composants partagés, c’est souvent l’outil front-end le plus précieux après le framework lui-même.

Stories

Un fichier de story exporte un objet meta par défaut et un export nommé par état.

// 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 },
};

Le title détermine l’emplacement du composant dans la barre latérale. Le component lie la story au composant afin que Storybook puisse en déduire les props et générer la documentation. Chaque export nommé correspond à une story.

Args et contrôles

Les args sont les props qu’une story passe au composant. Storybook les transforme en un panneau de contrôles, vous permettant ainsi de modifier les valeurs en temps réel sans éditer le code.

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

Comme les args sont des données structurées, ils alimentent également les autodocs, peuvent être partagés entre plusieurs stories et peuvent être réutilisés par les tests d’interaction. Définir le markup en ligne dans une fonction render fonctionne, mais vous perdez les contrôles en direct et la source unique de vérité ; privilégiez donc les args.

Décorateurs et contexte

Certains composants nécessitent un provider, un thème ou un wrapper de mise en page. Les décorateurs permettent de fournir ce contexte autour d’une story.

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

Un décorateur peut être global, défini par fichier ou par story, ce qui facilite la revue d’un composant sous différents thèmes ou locales sans avoir à modifier le composant lui-même.

Autodocs

Storybook peut générer une page de documentation à partir de vos stories et de leurs args. Lorsque l’option autodocs est activée, chaque composant dispose d’une page listant ses props, ses contrôles et toutes ses stories. Cette page reste synchronisée automatiquement puisqu’elle est générée à partir de la même source. Vous pouvez l’enrichir avec une description, des notes d’utilisation et des exemples de code en utilisant l’API parameters.docs.

Tests d’interaction

Une story peut définir une play function qui s’exécute après le rendu du composant. Elle utilise les mêmes requêtes et événements que Testing Library, le modèle mental est donc identique.

// 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();
  },
};

Comme le test s’exécute à l’intérieur de Storybook, vous pouvez le suivre étape par étape, ce qui rend le débogage bien plus simple qu’un échec en CI. Ces mêmes stories peuvent être exécutées en mode headless dans votre CI avec le test runner de Storybook.

Accessibilité et tests visuels

L’addon d’accessibilité exécute axe sur chaque story et signale les violations dans le panneau de l’addon, regroupées par niveau d’impact. Il détecte les labels manquants, les contrastes insuffisants, les attributs ARIA invalides et d’autres problèmes similaires pendant le développement, ce qui est bien moins coûteux que de les corriger plus tard.

Les outils de régression visuelle capturent une capture d’écran par story et la comparent à une référence (baseline). Comme chaque état est déjà une story, vous obtenez une large couverture visuelle avec très peu d’efforts supplémentaires. Toute modification d’une capture d’écran signale un changement visuel involontaire à examiner.

Où se situe Storybook

Storybook se positionne entre les tests unitaires et les tests de bout en bout. Il ne remplace aucun des deux. Utilisez-le pour développer et documenter vos composants de manière isolée, pour tester des états interactifs avec des fonctions play, et pour auditer l’accessibilité et le rendu visuel. Conservez vos tests de logique rapides dans Vitest, les tests de comportement des composants dans Testing Library, et les parcours utilisateurs complets dans Playwright.

Bonnes pratiques

  • Rédigez une story par état significatif, y compris le chargement, l’état vide et les erreurs.
  • Privilégiez les args au marquage en ligne afin que les contrôles et la documentation restent précis.
  • Colocalisez les stories avec leurs composants et nommez-les selon leur usage.
  • Utilisez des decorators pour les providers, les thèmes et le layout au lieu de dupliquer les wrappers.
  • Ajoutez des fonctions play pour les interactions et exécutez-les dans votre CI.
  • Activez l’addon d’accessibilité et corrigez les violations dès qu’elles apparaissent.
  • Publiez le Storybook buildé en tant que documentation vivante.

Erreurs courantes

  • Ne rédiger qu’une story “Default” et oublier les états réels.
  • Hardcoder les props dans render, perdant ainsi le contrôle et la documentation.
  • Considérer Storybook comme un remplacement pour les tests unitaires ou de bout en bout.
  • Laisser les stories s’écarter des props réelles du composant.
  • Ignorer les avertissements d’accessibilité jusqu’à ce qu’ils s’accumulent.
  • Dupliquer la configuration du provider dans chaque story au lieu d’utiliser un decorator.

Et après ?

Storybook transforme vos composants en un catalogue documenté et testable. Associez-le à Testing Library pour les requêtes à l’intérieur des fonctions play, Vitest pour les tests de logique et Playwright pour les flux de bout en bout. Ensuite, choisissez votre composant le plus utilisé et créez des stories pour chacun de ses états possibles.

Définition des entrées de story

Les args alimentent les controls et la documentation. Le JSX codé en dur duplique le balisage et ne peut pas être ajusté en direct.

Préférer
export const Large = {
  args: {
    size: "large",
    children: "Save",
  },
};
Éviter
export const Large = {
  render: () => (
    <Button size="large">
      Save
    </Button>
  ),
};

Couverture des états

Une story par état significatif documente le composant et fournit une base pour exécuter des tests.

Préférer
export const Loading = {
  args: { state: "loading" },
};
export const Empty = {
  args: { state: "empty" },
};
export const Error = {
  args: { state: "error" },
};
Éviter
export const Default = {
  args: { state: "ready" },
};
// every other state lives
// only in the real app

FAQ

Foire aux questions

Keep learning

Related topics from the roadmap.

$ commencer à apprendre

Prêt à apprendre Storybook ?

Notre tutoriel interactif vous guide à travers Storybook pas à pas — avec des quiz et du vrai code que vous pouvez exécuter dans le navigateur.