Créer un composant React accessible avec TypeScript

Générez un composant React typé et accessible, avec des tests, en suivant de bonnes pratiques de composition et de gestion d'état. Conçu pour ChatGPT, Claude et Microsoft Copilot. Il comprend 3 variables personnalisables et vous pouvez le copier gratuitement en un clic.

Intermédiaire · Code · En attente de relecture éditoriale

Prompt

Tu es un développeur frontend senior spécialisé en React, TypeScript et accessibilité (WCAG 2.2 AA).

Crée le composant {{component}} avec ces exigences :
- Fonctionnalité : {{functionality}}
- Styles avec : {{styling}}
- Il doit gérer ces états : chargement, vide, erreur et succès.

Exigences techniques :
1. Props typées avec une interface exportée et des valeurs par défaut cohérentes.
2. Accessibilité : rôles et attributs ARIA uniquement si nécessaire, focus visible, navigation complète au clavier et texte pour lecteurs d'écran.
3. Aucune dépendance d'exécution autre que React et le système de styles choisi ; pour les tests, uniquement React Testing Library et user-event.
4. Un exemple d'utilisation du composant.
5. Des tests avec React Testing Library couvrant l'interaction clavier et les états.

À la fin, explique quelles décisions d'accessibilité tu as prises et pourquoi.

Comment l'utiliser

Mentionnez la bibliothèque de styles déjà utilisée dans votre projet pour que le résultat s'y intègre. Vérifiez toujours le composant avec un lecteur d'écran ou le panneau d'accessibilité du navigateur.

Exemple d'utilisation

Composant : sélecteur de date avec plage minimale et maximale.

Exemple de résultat

Composant (extrait)

export interface CityComboboxProps {
  options: string[];
  label?: string;
  status?: 'loading' | 'error' | 'success';
  onSelect: (city: string) => void;
}

export function CityCombobox({ options, label = 'Ville', status = 'success', onSelect }: CityComboboxProps) {
  const [query, setQuery] = useState('');
  const [active, setActive] = useState(-1);
  const listId = useId();
  const results = options.filter((c) => c.toLowerCase().includes(query.toLowerCase()));

  function onKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {
    if (e.key === 'ArrowDown') setActive((i) => Math.min(i + 1, results.length - 1));
    if (e.key === 'ArrowUp') setActive((i) => Math.max(i - 1, 0));
    if (e.key === 'Enter' && results[active]) onSelect(results[active]);
    if (e.key === 'Escape') setActive(-1);
  }

  return (
    <div className="relative">
      <label htmlFor={`${listId}-input`} className="block text-sm font-medium">{label}</label>
      <input
        id={`${listId}-input`} role="combobox" aria-expanded={results.length > 0} aria-controls={listId}
        aria-activedescendant={active >= 0 ? `${listId}-${active}` : undefined}
        className="w-full rounded border px-3 py-2 focus-visible:ring-2 focus-visible:ring-blue-600"
        value={query} onChange={(e) => setQuery(e.target.value)} onKeyDown={onKeyDown}
      />
      <ul id={listId} role="listbox" className="absolute z-10 w-full rounded border bg-white">
        {results.map((city, i) => (
          <li key={city} id={`${listId}-${i}`} role="option" aria-selected={i === active}
            className={i === active ? 'bg-blue-100 px-3 py-1' : 'px-3 py-1'} onMouseDown={() => onSelect(city)}>
            {city}
          </li>
        ))}
      </ul>
      <p role="status" className="sr-only">{status === 'loading' ? 'Chargement…' : `${results.length} résultats`}</p>
    </div>
  );
}

Choix d'accessibilité

  • Le focus reste sur le champ et aria-activedescendant indique l'option active, comme le préconise le motif combobox d'ARIA.
  • Le nombre de résultats est annoncé dans une zone role="status" : le lecteur d'écran l'annonce sans déplacer le focus…

Informations clés

Catégorie
Programmation et développement · React
Type de résultat
Code
Niveau
Intermédiaire
Conçu pour
ChatGPT, Claude et Microsoft Copilot
Vérifié sur
En attente de vérification éditoriale
Variables
Composant, Fonctionnalité et Système de styles
Langue
Français
Prix
Gratuit, sans inscription
Mis à jour
07/11/2026

Questions fréquentes

Mon composant sera-t-il conforme aux WCAG ?

Pas à lui seul. Vous obtenez une base solide, mais il faut encore tester au clavier, avec un lecteur d'écran comme NVDA ou VoiceOver et avec un outil automatique comme axe.

Est-ce compatible avec Next.js ?

Oui. Le composant est du React standard ; avec l'App Router de Next.js, ajoutez 'use client' en haut du fichier s'il utilise un état ou des gestionnaires d'événements.

À quoi sert ce prompt ?

Générez un composant React typé et accessible, avec des tests, en suivant de bonnes pratiques de composition et de gestion d'état.

Avec quels outils d'IA fonctionne-t-il ?

Il est conçu pour ChatGPT, Claude et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.

Comment personnaliser le prompt ?

Cliquez sur « Personnaliser » et remplissez les variables (Composant, Fonctionnalité et Système de styles). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.

Faut-il de l'expérience pour l'utiliser ?

Il est de niveau intermédiaire : il vaut mieux connaître le sujet pour fournir un bon contexte et relire le résultat d'un œil critique.

Ce prompt est-il gratuit ?

Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.

Puis-je me fier au résultat de l'IA ?

Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.

Prompts similaires