¿Qué estrategia seguirías para optimistic UI, rollback e invalidación de datos en Pinia o composables?
¿Qué estrategia seguirías para optimistic UI, rollback e invalidación de datos en Pinia o composables? en Vue senior: explicación técnica directa, decisiones...
Difícil Gestión de estadoPiniaResiliencia
Respuesta
- Haz optimistic UI solo cuando la acción sea reversible o el rollback sea entendible para el usuario.
- Guarda el estado previo o una operación inversa para poder deshacer con precisión si la petición falla o el servidor responde distinto.
- Define también cómo invalidas o refrescas listas relacionadas para no quedarte con una pantalla aparentemente correcta pero desfasada.
Puntos clave
- Pinia funciona mejor cuando el store guarda estado canónico, los getters derivan y las acciones concentran escrituras y asincronía.
- No todo estado merece ser global: inputs temporales, toggles locales o borradores efímeros suelen ser más claros cerca del componente.
- Cuando un dato existe en formulario, URL, caché y store, la pregunta correcta no es cómo sincronizarlo todo, sino quién debería ser el dueño.
Errores comunes
- Meter demasiado estado efímero en Pinia hace más opaco el flujo y complica la trazabilidad sin ganar nada real.
- Sin una política clara de invalidación, rollback o responsabilidad sobre el dato, el estado remoto acaba sobrescribiendo datos correctos en mal momento.
Ejemplo de código
async function toggleDone(taskId: string) {
const previous = tasks.value.slice();
tasks.value = tasks.value.map((task) =>
task.id === taskId ? { ...task, done: !task.done } : task,
);
try {
await api.patch(`/tasks/${taskId}`);
} catch (error) {
tasks.value = previous;
throw error;
}
}
Ejemplo o caso real
Se nota mucho en flujos donde conviven URL, borradores, caché y respuestas del servidor, porque cualquier responsabilidad ambigua sobre el dato termina enseñando un valor incorrecto.
Idea clave
Antes de sincronizar varios estados, decido quién debería ser el dueño real del dato.
¿Completaste esta sección?
Marcarla como leída actualiza tu progreso.