Creé una función axios que obtiene imágenes y las muestra en una página web. El problema es que, cuando el axios realiza la solicitud, entra en un ciclo infinito de solicitudes y nunca se detiene. El número en la burbuja azul sigue aumentando rápidamente.
No estoy seguro de cuál es el problema. Cualquier ayuda será apreciada.
este es un componente de diapositiva que muestra fotos en un control deslizante
<Slide v-for="(post, index) in getAllInstaPosts" :key="index" :class="`slide slide-${index}`" :aria-hidden="index === 0 ? false : true" >obtiene su información de este método en la propiedad calculada: intenté usar la palabra clave asíncrona aquí, pero el compilador seguía quejándose: asíncrono inesperado
getAllInstaPosts () { return (this.item.pdp && this.item.pdp === true) ? this.getInstaPostsForProduct() : this.allInstaPosts }esta función en la propiedad de métodos que crea la solicitud.
getInstaPostsForProduct () { // <- makes a call to foursixty api to fetch insta posts of a certain product axios.get(`https://foursixty.com/api/v2/${foursixty.sitename}/timeline/?for_url=https://www.${foursixty.domainName}/${this.$router.currentRoute.path}`) .then(response => { if (response.status === 200) { this.postsForUrl = response.data.results console.log('DATA:' + response.data) } }) .catch((err) => { Logger.error(err); }) return this.postsForUrl; }La solución es almacenar el estado en sus propiedades de datos y actualizarlo en el momento apropiado, como cuando cambia su ruta actual.
export default { data: () => ({ allInstaPosts: [], // ¯\_(ツ)_/¯ postsForUrl: [], item: { pdp: true // ¯\_(ツ)_/¯ } }), computed: { getAllInstaPosts () { return this.item.pdp ? this.postsForUrl : this.allInstaPosts; } }, methods: { async getInstaPostsForProduct () { this.postsForUrl = []; // empty the array try { const { data: { results } } = await axios.get( `https://foursixty.com/api/v2/${foursixty.sitename}/timeline/`, { params: { for_url: `https://www.${foursixty.domainName}/${this.$route.path}` } } ); this.postsForUrl = results; } catch (err) { Logger.error(err); } } }, watch: { $route: { // watch for route changes and trigger the request immediate: true, handler: "getInstaPostsForProduct" } } };