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-activedescendantindique 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.