CursosEmpresasBlogLiveConfPrecios

Performance de Get Initial Props

Clase 9 de 23 • Curso de Next.js 2018

Clase anteriorSiguiente clase

Contenido del curso

Introducción a Next.JS

  • 1

    ¿Dónde aprender Next.js actualizado?

    00:14 min
  • 2
    ¿Qué es Next.JS?

    ¿Qué es Next.JS?

    01:41 min
  • 3
    Creando nuestra primera página

    Creando nuestra primera página

    07:44 min
  • 4
    Styled JSX

    Styled JSX

    09:54 min

Server Side Rendering

  • 5
    Aprende qué es Server Side Rendering

    Aprende qué es Server Side Rendering

    04:15 min
  • 6
    Intro a getInitialProps

    Intro a getInitialProps

    14:44 min
  • 7
    Utilizando el componente Link

    Utilizando el componente Link

    08:01 min
  • 8
    Recibiendo Parámetros

    Recibiendo Parámetros

    13:20 min
  • 9
    Performance de Get Initial Props

    Performance de Get Initial Props

    Viendo ahora
  • 10
    Vista de Podcasts

    Vista de Podcasts

    02:07 min

Componentes Reutilizables

  • 11
    Creando componentes en React

    Creando componentes en React

    15:16 min
  • 12
    Reorganizar la vista de podcasts

    Reorganizar la vista de podcasts

    03:03 min

Navegación Avanzada

  • 13
    Gestionando Errores

    Gestionando Errores

    14:06 min
  • 14
    Personalizando errores

    Personalizando errores

    10:21 min
  • 15
    ¿Cómo diseñar URLs?

    ¿Cómo diseñar URLs?

    03:34 min
  • 16
    Configurando Next Routes

    Configurando Next Routes

    11:26 min
  • 17
    Implementando Next Routes

    Implementando Next Routes

    08:04 min
  • 18
    Vistas Híbridas

    Vistas Híbridas

    12:56 min
  • 19
    Implementar el Modal

    Implementar el Modal

    06:24 min
  • 20
    Agregando un loader

    Agregando un loader

    03:44 min

Publicando nuestra app

  • 21
    Mejores prácticas en Github

    Mejores prácticas en Github

    04:33 min
  • 22
    Publicar la app con now

    Publicar la app con now

    02:39 min
  • 23
    Conclusiones del curso

    Conclusiones del curso

    01:07 min
Tomar examen
Resumen

Al utilizar await en cada fetch al traer los datos desde la API nos evitamos el callback hell, pero estamos haciendo que el usuario tenga que esperar cerca de un segundo y medio hasta que se completen secuencialmente las tres request.
En esta clase veremos cómo con Promise.all() solucionamos este problema de performance al paralelizar nuestras request.

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
        Jose Chirinos

        Jose Chirinos

        student•
        hace 8 años

        Se puede optimizar los requests de forma paralela con:
        Promise.all()

        Sintaxis:

        let[req1, req2] = await Promise.all([ fetch(url_1), fetch(url_2) ])
        William Velázquez

        William Velázquez

        student•
        hace 8 años

        Opte por optimizar un poco más la otra parte asíncrona después de que se obtuvo lo necesario de la API quedándome de la siguiente forma:

        let [dataChannel, dataSeries, dataAudios] = await Promise.all([ reqChannel.json(), reqSeries.json(), reqAudios.json() ]) let channel = dataChannel.body.channel let series = dataSeries.body.channels let audioClips = dataAudios.body.audio_clips

        😃

          Eduardo Hidalgo Díaz Rugama

          Eduardo Hidalgo Díaz Rugama

          student•
          hace 7 años

          te falta meterle manejo de errores, y que muestres un mensaje de error amigable en caso que te falle algun llamado. Igual, algo interesante, ¿como le harías para pintar en pantalla aquellos llamados que si se cumplieron y solo mostrar el error en la sección donde truene?

          Sergio Alejandro Trejo Cuxim

          Sergio Alejandro Trejo Cuxim

          student•
          hace 6 años

          Existen varias formas de lo que plantea Eduardo, para el caso de los 'child_channels', podemos con un IF si la request tiene o no datos, si tiene entonces regresar la data, de lo contrario, regresar la data con un mensaje de error.

        Juan Esteban Deossa Pertuz

        Juan Esteban Deossa Pertuz

        student•
        hace 6 años

        Cada vez que tengamos la necesidad de realizar varias peticiones a una API, la mejor practica es usar Promise.all(), es una función que nos permite realizar varias peticiones en paralelo, nos resulta bastante útil para mejor la rapidez de carga.

        Luis Lira

        Luis Lira

        student•
        hace 7 años

        Si quieren hacer tanto la request como la parte de pasar a JSON en la misma parte donde se hacen todas juntas, pueden usar .then()

        Personalmente a mí me gusta más así para no declarar tantas variables ^^

        static async getInitialProps({query}){ let idChannel = query.id let [reqChannel, reqSeries, reqAudios] = await Promise.all([ fetch(`https://api.audioboom.com/channels/${idChannel}`).then((response) => response.json()), fetch(`https://api.audioboom.com/channels/${idChannel}/child_channels`).then((response) => response.json()), fetch(`https://api.audioboom.com/channels/${idChannel}/audio_clips`).then((response) => response.json()) ]) let channel = reqChannel.body.channel; let series = reqSeries.body.channels; let audioClips = reqAudios.body.audio_clips; return { channel, audioClips, series } }```
          Diego Ivan Padilla Bernal

          Diego Ivan Padilla Bernal

          student•
          hace 7 años

          Lo que hace el profesor no está del todo mal porque lo ideal es escribir código de forma vertical y no horizontal para hacerlo más legible pero pues fuera de eso ya depende de gustos

          Por cierto en tu caso ya no sería la request sino la data así que esto ya es de buenas practicas, y las buenas practicas dicen que debes nombrar las variables conforme lo que tienen que sería:

          [dataChannel, dataSeries, dataAudios]

          Antonio Hernández Campos

          Antonio Hernández Campos

          student•
          hace 6 años

          Siempre se debería buscar que el código sea fácil de leer, regularmente se pasa mucho más tiempo leyendo código existente que escribiendo código nuevo y tiene muchos beneficios como mayor limpieza, fácil comprensión y por tanto fácil mantenimiento del mismo (entre muchos otros beneficios).

          Por ejemplo: Tener únicamente ".json()" como en el código original es mucho más fácil de leer que esta versión: .then( ( response ) => response.json() )

        Mauricio Hernan Cabrera

        Mauricio Hernan Cabrera

        student•
        hace 7 años

        Bueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee e esto esta genial!

        static async getInitialProps ({ query: { id }}) { const [reqChannel, reqAudio, reqSeries] = await Promise.all([ fetch(`https://api.audioboom.com/channels/${id}`), fetch(`https://api.audioboom.com/channels/${id}/audio_clips`), fetch(`https://api.audioboom.com/channels/${id}/child_channels`) ]) const [ { body: { channel }}, { body: { audio_clips: audioClips }}, { body: { channels: series }} ] = await Promise.all([ reqChannel.json(), reqAudio.json(), reqSeries.json() ]) return { channel, audioClips, series } }
        Daniel Gaspar Chi Caballero

        Daniel Gaspar Chi Caballero

        student•
        hace 6 años

        Usando aún mas la desestructuración y cachando errores

        static async getInitialProps({ query: { id } }) { try { const [reqChannel, reqAudios, reqChilds] = await Promise.all([ fetch(`https://api.audioboom.com/channels/${id}`), fetch(`https://api.audioboom.com/channels/${id}/audio_clips`), fetch(`https://api.audioboom.com/channels/${id}/child_channels`), ]); const { body: { channel } } = await reqChannel.json(); const { body: { audio_clips } } = await reqAudios.json(); const { body: { channels } } = await reqChilds.json(); return { channel, audio_clips, channels }; } catch ({ message }) { return (message); } }
        Elvis Aaron Retiz

        Elvis Aaron Retiz

        student•
        hace 7 años

        ¿Saben que es lo que tengo que hacer para integrar mi aplicación con firebase para usar firestore?

          Johan Stivens Suarez Galindo

          Johan Stivens Suarez Galindo

          student•
          hace 6 años

          Por supuesto, solo tienes que configurar firebase en tu proyecto con un par de parametrizaciones que firebase te brinda cuando creas tu proyecto y asimismo hacer las peticiones a firestore que prefieras. Cuando creas Firebase, este te brinda el código de configuración y cada que debas realizar alguna funcionalidad de las que te brinda firebase, debes invocar esa configuración, te recomendaría que la configuraras en un archivo "firebase.js" y lo llames cada que lo requieras.

        Adrian Morales Rosas

        Adrian Morales Rosas

        student•
        hace 7 años

        No me gusto esta clase, se salta muchas cosas que en un principio son difíciles de entender

          Daniel Esteves

          Daniel Esteves

          student•
          hace 6 años

          Hola Antony, ¿podrías contarnos que cosas te dieron dificultad?

        Diego Alejandro Cardona Giraldo

        Diego Alejandro Cardona Giraldo

        student•
        hace 7 años

        Porqué usamos let [req1, re2] en vez de const [req1, req2]?

        Probé con const y me funciona muy bien. Por favor alguien digame que diferencia puede haber entre uno y otro.

          Erik Elyager

          Erik Elyager

          student•
          hace 7 años

          Si usas const tanto req1 como req2 no podrán ser reasignadas en ningún momento en el código:

          req1 = 'Otro valor' // Esto te muestra un error

          const se usa para cuando quieres que una variable sea inmutable, si este es el caso, adelante.

          Diego Ivan Padilla Bernal

          Diego Ivan Padilla Bernal

          student•
          hace 7 años

          Yo creo que usar let lo hizo más por costumbre porque en este caso lo ideal si seria const porque no se modifica

        Sergio Alejandro Trejo Cuxim

        Sergio Alejandro Trejo Cuxim

        student•
        hace 6 años

        Promise.all

        Tener en cuenta que puede romperse: Si alguna de las promesas pasadas en el argumento iterable falla, la promesa all es rechazada inmediatamente con el valor de la promesa que fué rechazada, descartando todas las demás promesas hayan sido o no cumplidas. - MDN

        Para evitar que se termine el ciclo por "falla" implemente lo siguiente, no es lo mejor pero funciona, espero comentarios.

        Gracias a esto si alguno falla continua la ejecución de las demás.

        const [ requestChannel, requestClips, requestChilds ] = await Promise.all([ request.get(`/channels/${idChannel}`, '').catch(error => error), request.get(`/channels/${idChannel}/audio_clips`, '').catch(error => error), request.get(`/channels/${idChannel}/child_channels`, '').catch(error => error) ]);

        Utilicé otro cliente HTTP para utilizar las llamadas al API, pero utilicen la Fetch del curso.

          René Sanchez

          René Sanchez

          student•
          hace 6 años

          Muy buen aporte :)

        Nacho Ávila

        Nacho Ávila

        student•
        hace 7 años

        Me pregunto si no es más óptimo cargar el contenido de la pagina mínimo con un loader y una vez cargada la página hacer estas request. El tiempo de carga sería el mismo pero tanto para arañas de búsqueda como para el usuario, la página se carga antes aunque sin contenido útil. Creo que es el standard actual. ¿Que opináis?

          Daniel Esteves

          Daniel Esteves

          student•
          hace 6 años

          No te lo recomiendo, siempre debemos mostrarle a nuestros usuarios contenido para darle cierto feedback de lo que está pasando, y los loaders suelen ser molestos

        Jhair Guzman

        Jhair Guzman

        student•
        hace 5 años

        Usando getServerSideProps y declarando funciones asíncronas, se puede tener un código más modulado:

        Cada función asíncrona se encarga de obtener datos puntuales del canal.

        async function getChannel(channelId) { const request = await fetch(`https://api.audioboom.com/channels/${channelId}`); const { body: { channel } } = await request.json(); return channel; } async function getAudioclips(channelId) { const request = await fetch(`https://api.audioboom.com/channels/${channelId}/audio_clips`); const { body: { audio_clips } } = await request.json(); return audio_clips; } async function getChildChannels(channelId) { const request = await fetch(`https://api.audioboom.com/channels/${channelId}/child_channels`); const { body: { channels } } = await request.json(); return channels; } export async function getServerSideProps({ query }) { const [channel, audioClips, series] = await Promise.all([ getChannel(query.id), getAudioclips(query.id), getChildChannels(query.id), ]); return { props: { channel, audioClips, series }, }; }
        Wilson Fabian Pérez Sucuzhañay

        Wilson Fabian Pérez Sucuzhañay

        student•
        hace 7 años

        Consulta como se deberia hacer el await si para el siguiente fecht necesita del anterior ya no servivio el all? ¿Qué metodo deberiamos utilizar?

        Ricardo José Galarza Palacios

        Ricardo José Galarza Palacios

        student•
        hace 6 años

        Un poco mas corto

        static async getInitialProps({ query }) { let [reqChannel, reqAudioClips, reqSeries] = await Promise.all([ fetch(`https://api.audioboom.com/channels/${query.id}`), fetch(`https://api.audioboom.com/channels/${query.id}/audio_clips`), fetch(`https://api.audioboom.com/channels/${query.id}/child_channels`) ]); let channel = (await reqChannel.json()).body.channel; let audioClips = (await reqAudioClips.json()).body.audio_clips; let series = (await reqSeries.json()).body.channels; return {channel, audioClips, series} }```
        VICTOR MEZA

        VICTOR MEZA

        student•
        hace 5 años

        Aquí el código de ésta clase. Excelente tip del Promise.All()

        export default class extends React.Component { static async getInitialProps({ query }) { let idChannel = query.id; let [reqChannel, reqSeries, reqAudios] = await Promise.all([ //Mejora el performance de la App porque hace los request en paralelo fetch(`https://api.audioboom.com/channels/${idChannel}`), fetch(`https://api.audioboom.com/channels/${idChannel}/child_channels`), fetch(`https://api.audioboom.com/channels/${idChannel}/audio_clips`) ]); let dataChannel = await reqChannel.json(); let channel = dataChannel.body.channel; let dataAudios = await reqAudios.json(); let audioClips = dataAudios.body.audio_clips; let dataSeries = await reqSeries.json(); let series = dataSeries.body.channels; return { channel, audioClips, series }; } render() { const { channel, audioClips, series } = this.props; return ( <div> <header>@viistorrr Podcasts</header> <h1>{channel.title}</h1> <h2>Ultimos Podcasts</h2> {audioClips.map(clip => ( <div>{clip.title}</div> ))} <h2>Series</h2> {series.map(serie => ( <div>{serie.title}</div> ))} <style jsx>{` header { color: #fff; background: #8756ca; padding: 15px; text-align: center; } .channels { display: grid; grid-gap: 15px; padding: 15px; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); } a.channel { display: block; margin-bottom: 0.5em; color: #333; text-decoration: none; } .channel img { border-radius: 3px; box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.15); width: 100%; } h1 { font-weight: 600; padding: 15px; } h2 { padding: 5px; font-size: 0.9em; font-weight: 600; margin: 0; text-align: center; } `}</style> <style jsx global>{` body { margin: 0; font-family: system-ui; background: white; } `}</style> </div> ); } }
        Luis Diaz Venero

        Luis Diaz Venero

        student•
        hace 7 años

        Request paralelas a un api, mejora de performance

        Jonathan Andres Vasquez Valle

        Jonathan Andres Vasquez Valle

        student•
        hace 5 años

        Si utilizan axios, no es necesario hacer la conversión a json:

        Deben instalar primero axios e importarlo.

        import axios from "axios"; //Capturamos la data de la api let data= await axios.get("https://api.audioboom.com/channels/recommended"); //La respuesta es un objeto con la propiedad data donde viene todo como un json return data.data
        Jose Adrian Valentin Rodriguez

        Jose Adrian Valentin Rodriguez

        student•
        hace 6 años

        en todo los componentes que maneje muchas consultas tengo que ocupar el promise.all eso no afecta? si consultara muchos componentes en el componente index? ejemplo mi index llamara 4 componentes y todos llaman varias consultar?

          Alessandri Fonseca

          Alessandri Fonseca

          student•
          hace 6 años

          El promise.all() ejecuta tus promesas en paralelo para que el tiempo de espera sea menor, podrías hacerlo una a una pero por el tiempo de espera seria una mala experiencia de usuario. En tu caso podrías hacer las consultas en el index con promise.all y pasarla como propiedades a tus 4 componentes

        Alejandro Hernández

        Alejandro Hernández

        student•
        hace 6 años

        Asi puede implementarse axios en el getInitialProps

        channel.getInitialProps = async ({ query }) => { let idChannel = query.id; let URL1 = `https://api.audioboom.com/channels/${idChannel}` let URL2 = `https://api.audioboom.com/channels/${idChannel}/audio_clips` let URL3 = `https://api.audioboom.com/channels/${idChannel}/child_channels` let [ reqChannel, reqAudios, reqSeries ] = await Promise.all([ axios.get(URL1), axios.get(URL2), axios.get(URL3) ]); const dataChannel = await reqChannel.data; let channel = dataChannel.body.channel; const dataAudios = await reqAudios.data; let audioClips = dataAudios.body.audio_clips; const dataSeries = await reqSeries.data; let series = dataSeries.body.channels; let response = { channel, audioClips, series } return {...response} }
          Jonathan Andres Vasquez Valle

          Jonathan Andres Vasquez Valle

          student•
          hace 5 años

          Axios lo hace más interesante porque te devuelve todo como un json, yo en todo el curso he utilizado axios. Interesante aporte.