Saltar al contenido
Framework Ecosystems LabsUn contrato, muchos ecosistemas, la misma prueba.

Por qué sí y por qué no — Listas y claves#

⬅️ Clase 085 · 📚 Parte 6

Por qué sí Por qué no Qué se paga
React Es el único que avisa en ejecución cuando la clave falta No dice nada cuando dos claves se repiten, que es el caso peor Un aviso en la consola que en un servidor no lee nadie
Vue La defensa llega antes de ejecutar: el verificador marca v-for sin key como error Esa defensa es de la herramienta, no del framework, y se puede desactivar Que el proyecto sin linter quede sin ninguna red
Svelte La clave es parte de la sintaxis del bucle: se ve al leer No avisa si falta — solo si se repite, y entonces lanza una excepción Descubrir el error en el navegador y no en la revisión
SolidJS No hay claves que equivocar: la identidad es la referencia del objeto El error se muda: recrear objetos hace que se redibuje la lista entera Vigilar de dónde salen los objetos, sin ningún aviso que lo recuerde

🧭 Lo que este contrato no puede probar#

💡 Lo que hay que llevarse#

Una clave contesta una sola pregunta, y hay que tenerla en la cabeza al escribirla: este elemento de ahora, ¿es el mismo que aquel de antes?

De ahí sale todo:

Y la observación incómoda de esta clase: el HTML es correcto en todos los casos. Un fallo de claves no se ve en la salida, no rompe ninguna prueba de render y pasa las revisiones sin que nadie levante la mano. Solo aparece cuando la lista se mueve y el estado se queda — y para entonces el síntoma («la casilla marcada salta de fila») no se parece en nada a la causa.

Por eso los cuatro frameworks intentan defenderte y ninguno lo consigue del todo: React grita cuando falta, Svelte cuando se repite, Vue antes de ejecutar y Solid cambiando el modelo. Cuatro defensas parciales para un error que el resultado no delata.

La conclusión práctica cabe en una regla: si la lista puede cambiar de orden, la clave sale del dato. Y si no puede cambiar de orden hoy, va a poder mañana.

Fuentes#