Crear un componente React accesible con TypeScript
Genera un componente React tipado, accesible y con tests, siguiendo buenas prácticas de composición y estados. Pensado para ChatGPT, Claude y Microsoft Copilot. Incluye 3 variables personalizables y se copia gratis en un clic.
Intermedio · Código · Pendiente de revisión editorial
Prompt
Eres un desarrollador frontend senior especializado en React, TypeScript y accesibilidad (WCAG 2.2 AA).
Crea el componente {{componente}} con estos requisitos:
- Funcionalidad: {{funcionalidad}}
- Estilos con: {{estilos}}
- Debe gestionar los estados: cargando, vacío, error y éxito.
Requisitos técnicos:
1. Props tipadas con una interfaz exportada y valores por defecto razonables.
2. Accesibilidad: roles y atributos ARIA solo cuando sean necesarios, foco visible, navegación completa con teclado y textos para lectores de pantalla.
3. Sin dependencias de ejecución salvo React y el sistema de estilos elegido; en los tests solo React Testing Library y user-event.
4. Ejemplo de uso del componente.
5. Tests con React Testing Library que cubran la interacción por teclado y los estados.
Explica al final qué decisiones de accesibilidad has tomado y por qué.Cómo usarlo
Indica la librería de estilos que ya usa tu proyecto para que el resultado encaje. Revisa siempre el componente con un lector de pantalla o con la pestaña de accesibilidad del navegador.
Ejemplo de uso
Componente: selector de fecha (DatePicker) con rango mínimo y máximo.
Resultado de ejemplo
Componente (extracto)
export interface CityComboboxProps {
options: string[];
label?: string;
status?: 'loading' | 'error' | 'success';
onSelect: (city: string) => void;
}
export function CityCombobox({ options, label = 'Ciudad', 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' ? 'Cargando…' : `${results.length} resultados`}</p>
</div>
);
}
Decisiones de accesibilidad
- El foco se queda en el input y
aria-activedescendantindica la opción activa, como recomienda el patrón combobox de ARIA. - El recuento de resultados se anuncia en una región
role="status", así el lector de pantalla informa sin mover el foco…
Datos clave
- Categoría
- Programación y desarrollo · React
- Tipo de resultado
- Código
- Nivel
- Intermedio
- Pensado para
- ChatGPT, Claude y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Componente, Funcionalidad y Sistema de estilos
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Con esto mi componente cumple las WCAG?
No por sí solo. Te da una base sólida, pero aún tienes que probarlo con el teclado, con un lector de pantalla como NVDA o VoiceOver y con un verificador automático como axe.
¿Funciona con Next.js?
Sí. El componente es React estándar; con el App Router de Next.js, añade 'use client' al principio del archivo si usa estado o manejadores de eventos.
¿Para qué sirve este prompt?
Genera un componente React tipado, accesible y con tests, siguiendo buenas prácticas de composición y estados.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Componente, Funcionalidad y Sistema de estilos). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.