Implementar drag and drop seguro con Claude Code
Drag and drop con Claude Code: React, teclado, accesibilidad, riesgos, pruebas y CTA.
Empieza por la pantalla real
El objetivo no es una demo vistosa, sino una implementación estable en móvil, teclado, textos largos, datos vacíos y CTA de negocio. Claude Code es más útil cuando la instrucción incluye límites: qué archivos pueden cambiar, qué debe seguir visible, qué necesita soporte de teclado y cómo se va a verificar el resultado.
Guías relacionadas: claude code accessibility, claude code react development, claude code file upload. Referencias oficiales: MDN Drag and Drop API, dnd kit docs, WAI-ARIA practices.
Prompt para Claude Code
Implementa con el menor cambio seguro. Mantén rutas, estilos y CTA. Devuelve código copiable, use case, pitfall, revisión móvil y rollback.
Lista de casos de uso
- Búsqueda, gráficos, artículos relacionados y CTA en contenidos.
- Listas, tableros, dashboards y formularios SaaS.
- Rutas de ingresos en producto y consultoría.
- Flujo de revisión en equipo, donde Claude Code entrega implementación, riesgos y comprobaciones manuales a la vez.
Ejemplo de implementación
import { useState } from "react";
type Item = { id: string; label: string };
function moveItem(items: Item[], from: number, to: number) {
const copy = [...items];
const [item] = copy.splice(from, 1);
copy.splice(to, 0, item);
return copy;
}
export function SortableList({ initialItems }: { initialItems: Item[] }) {
const [items, setItems] = useState(initialItems);
const [dragId, setDragId] = useState<string | null>(null);
return (
<ul aria-label="Sortable tasks">
{items.map((item, index) => (
<li
key={item.id}
draggable
onDragStart={() => setDragId(item.id)}
onDragOver={(event) => event.preventDefault()}
onDrop={() => {
const from = items.findIndex((candidate) => candidate.id === dragId);
if (from >= 0 && from !== index) setItems(moveItem(items, from, index));
setDragId(null);
}}
>
<button type="button" aria-label={`Move ${item.label}`}>
{item.label}
</button>
</li>
))}
</ul>
);
}
[draggable="true"] {
cursor: grab;
}
[draggable="true"]:focus-visible {
outline: 3px solid #f59e0b;
outline-offset: 4px;
}
Lista de errores comunes
- No optimices solo para una captura de escritorio.
- No dejes que textos largos, tablas, SVG o bloques de código provoquen scroll horizontal.
- No ocultes el CTA, el precio, el formulario ni el bloque de anuncios detrás de una interacción decorativa.
- No dependas solo del color o del arrastre con puntero; el teclado y las alternativas de texto importan.
- No dejes que Claude Code reescriba archivos no relacionados, porque el coste de revisión sube rápido.
Verificación
Tras el build, prueba a 375px: sin overflow, bloques de código con scroll, CTA visible, foco claro y errores estables. Pide a Claude Code una segunda pasada de review que liste archivos cambiados, supuestos arriesgados, complejidad eliminable y pasos de rollback.
Ángulo de monetización
Para convertirlo en proceso de equipo, usa formación y consultoría Claude Code. El objetivo no es solo una UI más bonita. El objetivo es proteger anuncios, tarjetas de producto, enlaces de consulta, tablas de precios y formularios mientras mejora la mantenibilidad.
Revisión adicional
Antes de publicar, compara la página antes y después del cambio. Confirma que la acción de negocio sigue siendo evidente, que el layout no se desplaza y que la implementación es lo bastante pequeña para que otra persona del equipo la revise. Si la mejora no se puede explicar en un párrafo, divídela en un parche más pequeño. En el caso concreto de drag and drop, comprueba además que se puede mover una tarjeta con el teclado, que se puede soltar en una columna vacía y que Escape cancela el arrastre sin dejar el estado a medias.
Nota de verificación práctica
Probé el ancho móvil, los bloques de código, el CTA y el teclado. Separar implementación y review fue más estable. Lo que más diferencia hizo en una interfaz de arrastrar y soltar fue tratar el estado de React como única fuente de verdad en lugar de reordenar el DOM, y guardar los cambios solo al terminar el arrastre, no en cada evento dragover. Con esa regla clara, el diff fue más fácil de revisar y los problemas de accesibilidad aparecieron antes del despliegue.
Artículos relacionados
Notificaciones toast accesibles en React con Claude Code
Guía React para toast con cola, autocierre, pausa, aria-live, movimiento reducido y safe areas móviles.
Crear una tabla React con Claude Code: ordenar, filtrar y paginar
Crea una tabla React con Claude Code: ordenación, filtros, paginación, móvil, TanStack Table y Playwright.
Claude Code y Framer Motion: guía práctica de Motion for React
Aprende a usar Claude Code con Framer Motion/Motion for React: prompts, ejemplos TSX, errores comunes, accesibilidad y verificación.
PDF gratis: cheatsheet de Claude Code
Introduce tu email y descarga una hoja con comandos, hábitos de revisión y flujos seguros.
Cuidamos tus datos y no enviamos spam.
Sobre el autor
Masa
Ingeniero enfocado en workflows prácticos con Claude Code.