Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

97
Vistas
Vue: muestra datos antiguos mientras carga uno nuevo

Digamos que en mi aplicación Vue3 tengo una tienda cuyo estado se ve así:

 const store = { state () => ({ items: [] }), // ... }

Mi App.vue tiene una sola <router-view /> como su único contenido de plantilla.

Luego tengo una vista de ItemList.vue que se parece a esto:

 <template> <div v-if="!loading"> <Item v-for="item in items" :key="item.id" :item="item" ></Item> </div> <Skeleton v-else /> </template> <script> import Item from "..."; import Skeleton from "..." import { mapState } from "vuex"; export default defineComponent({ name: "CourseList", mixins: [loadingMixin], components: { Item, Skeleton }, async created() { this.loading = true this.$store.dispatch("getItems", { categoryId: this.$route.params.categoryId }) this.loading = false }, data() { return { loading: false, }; }, computed: { ...mapState(["items"]) }, }); </script>

Esencialmente, la aplicación le permite navegar a las URL de las categories/<id>/items y recuperar elementos para esa categoría. Los artículos que se están viendo actualmente se almacenan en una matriz plana en la tienda. Cada vez que se crea el componente ItemList , se envía una acción que simplemente realiza una llamada a la API al extremo de elementos de esa categoría y guarda el resultado en el atributo de items de estado de la tienda. Mientras esto sucede, se muestra un esqueleto al usuario.

El problema con este enfoque es que, si bien el usuario siempre obtiene datos actualizados porque obtiene los elementos cada vez que navega a la vista, también existe el inconveniente de que, si los datos de la categoría no han cambiado, seguirán yendo. estar mirando el esqueleto hasta que se vuelvan a buscar los artículos.

Si el usuario hace clic en un enlace de enrutador y va a otra vista que no implica buscar elementos, luego regresa a la vista de lista de elementos para la misma categoría que la última que visitó, me gustaría que no tengan que esperar para ver los datos. Todavía me gustaría que la aplicación haga la búsqueda, pero mientras tanto muestre los datos existentes. Por supuesto, dado que estoy guardando una sola matriz de elementos, si el usuario va a la lista de otra categoría, esos datos no deben mostrarse y el usuario debe ver el esqueleto desde el principio.

¿Se puede hacer esto en Vue? Intenté usar el componente <keep-alive> y darle una :key correspondiente al parámetro de identificación de categoría de la ruta, pero no funcionó.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si sabe qué categorías ha visitado el usuario, puede cambiar condicionalmente el estado de loading ; de lo contrario, cree un set en vuex y conserve el identificador de categoryId anterior.

 async created() { if( the category has changed){ this.loading = true } this.$store.dispatch("getItems", { categoryId: this.$route.params.categoryId }) this.loading = false }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda