CursosEmpresasBlogLiveConfPrecios

Creando componentes en React

Clase 11 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

    04:39 min
  • 10
    Vista de Podcasts

    Vista de Podcasts

    02:07 min

Componentes Reutilizables

  • 11
    Creando componentes en React

    Creando componentes en React

    Viendo ahora
  • 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

La idea de un componente es identificar código duplicado o cosas que realmente no queremos copiar y pegar y separarlas en archivos independientes y reutilizables.

En esta clase vamos a empezar a crear componentes de React, no sólo páginas, sino los módulos que componen estas páginas.

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
        David Daniel Castillo Nava

        David Daniel Castillo Nava

        student•
        hace 8 años

        Cuando te pones a escuchar podcast en el mismo app que acabas de montar!! 😄 Cada vez se pone mas interesante el curso

          David Behar

          David Behar

          student•
          hace 6 años

          Me pasó exactamente eso, aprendí del conflicto de medio oriente en Irán, jeje

          Nicolas Restrepo

          Nicolas Restrepo

          student•
          hace 6 años

          que viva la procrastinación! jajajaj

        Jose Chirinos

        Jose Chirinos

        student•
        hace 8 años

        Recapitulación
        Siempre empezar por papel diseñando la api que queremos usar:

        • Crear Componentes: evitar la duplicidad de código
        • Separar en Componentes: Simples(solo render con props), Smart Components (con Lógica)
          Mario Menjívar

          Mario Menjívar

          student•
          hace 7 años

          Del curso de Leonidas 😄

        Diego Ivan Padilla Bernal

        Diego Ivan Padilla Bernal

        student•
        hace 7 años

        Para ChannelGrid y Layout no se debieron usar componentes stateful sino más bien stateless así esos componentes quedarían más legibles.

          Diego Ortiz

          Diego Ortiz

          student•
          hace 6 años

          Tome la idea y efectivamente, lo transformé en un stateless, así:

          import css from './channelGrid.scss' import Link from 'next/link' const ChannelGrid = (props) => { const channels = props.channels const channelsList = channels.map(channel => ( <Link href={`/channel?id=${channel.id}`} key={channel.id}> <a className={css.channelContainer}> <img className={css.channelImg} src={channel.urls.logo_image.original} /> <h2 className={css.channelTitle}> {channel.title} </h2> </a> </Link> )) return <div className={css.channels}> {channelsList} </div> } export default ChannelGrid
        William Velázquez

        William Velázquez

        student•
        hace 8 años

        ¿Hace falta importar isomorphic-fetch en cada uno de los js de pages? Actualmente lo estoy importando unicamente dentro del index pero no estoy seguro si al ponerse en producción me afecte el no importarlo en los demás.

        De antemano gracias,
        Saludos! 😃

          Roberto Gonzalez

          Roberto Gonzalez

          teacher•
          hace 8 años

          Es muy recomendable importar las librerías que utilices en cada archivo para evitar problemas o bugs a futuro (ya sean isomorphic-fetch, componentes u otras funciones). Olvidarse de importar libs a veces crea bugs donde una página anda navegando desde el browser (desde la home a una page en particular), pero que crashea si entrás directamente y Next tiene que hacer server side rendering.

          Otro caso es que en Next no suele hacer falta importar React en páginas o componentes, pero en cuanto empezás a agregar con algunos plugins de webpack el compilador falla con un error críptico si no importás React explícitamente. Cuando te pasa podés estar un rato largo googleando hasta descubrir que es por eso.

          .

          .

          student•
          hace 8 años

          En mi caso yo siempre he visto que solamente lo tienes que importar donde estés haciendo el fetch ya que ahí es donde vas a usar la funcionalidad de lo que estás importando.

        Mario Alejandro Crespo Reyes

        Mario Alejandro Crespo Reyes

        student•
        hace 6 años

        Tremenda claseee !!! acabo de comprender varios conceptos y funcionamientos que no entendí ni en el curso de React avanzado.

        Muy buena clase.

          Pilar Camargo Márquez

          Pilar Camargo Márquez

          student•
          hace 6 años

          Me pasó exactamente lo mismo, el profesor es muy teórico y esa ayuda bastante.

        Joaquin Araujo

        Joaquin Araujo

        student•
        hace 8 años

        Tal como dijo Robert, el <Head /> se puede colocar en cualquier lugar del código pero algo que siempre debes de tener en cuenta es: “Usar buenas prácticas”, tu código seguramente lo mirará otro dev (o tu yo del futuro) y es necesario que lo entienda.

        La traducción de <Head /> es Cabeza; por sentido común debería estar al principio del código 😃

        “Los individuos marcan goles, pero los equipos ganan partidos”, Zig Ziglar.

        Kevin Alvarez

        Kevin Alvarez

        student•
        hace 7 años

        Hola, haciendo la creación de los componentes al pasarle el prop al ChannelGrid me tira un error diciendo que .map no esta definido alguien sabe por que sucede

          Simón Rotjes

          Simón Rotjes

          student•
          hace 7 años

          Verifica que el objeto que estas pasando como una prop no sea null.

          Luis Manuel Brito Romero

          Luis Manuel Brito Romero

          student•
          hace 6 años

          Compañero. en el componente ChannelGrid, cuando asignas props a channels hay que hacerlo de esta manera

          const ChannelGrid = (props) => { const channels = props.channels; return ( <div className="channels"> { channels.map((channel) => ( <Link href={`/channel?id=${channel.id}`} key={channel.id}> <a className='channel'> <img src={channel.urls.logo_image.original} alt=""/> <h2>{channel.title}</h2> </a> </Link> )) } <style jsx> {` .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%; } h2 { padding: 5px; font-size: 0.9em; font-weight: 600; margin: 0; text-align: center; } `} </style> </div> ); } export default ChannelGrid; <code>
        Betty Rossana Jimenez Cedeño

        Betty Rossana Jimenez Cedeño

        student•
        hace 6 años

        Es mi idea, o el link que se esta usando para la API, es intendible

        Pilar Camargo Márquez

        Pilar Camargo Márquez

        student•
        hace 6 años

        ¿Por qué el instructor colocó el estilo del header aparte del global si en teoría se repiten en todos los componentes?

          Nicolás Arias

          Nicolás Arias

          student•
          hace 6 años

          Hola, la razón es que el profesor no quiere que los estilos del header afecten otros componentes. Por ejemplo, si en el futuro creas un componente card y su header es una etiqueda header los estilos del header del Layout estarian afectando el header de nuestra card. Un comportamiento que no esperariamos.

          Como regla general no deberíamos usar estilos globales a no ser que queramos aplicarle estilos a un elemento que se encuentre fuera de nuestro componente. Por ejemplo la etiqueta body.

        Eduardo Hidalgo Díaz Rugama

        Eduardo Hidalgo Díaz Rugama

        student•
        hace 7 años

        o woao. que grande! que magistral. en 15 minutos explicó perfectamente como integrar next.js con react, enseño patrón de componentes con react, y enseñó props, children y map.

        Estoy yendo a twitter a hacerle follow al profesor, y a seguirle la pista de cualquier curso que de.

        am visualdesigner

        am visualdesigner

        student•
        hace 6 años

        Me gustaría saber como se puede compilar estáticamente las páginas y obtener en html todo el contenido. He probado con getStaticProps() y `next export' pero no obtengo el resultado que se obtiene con un generador de webs estáticas, sin embargo en la documentación de next.js veo que si se puede hacer... Alguien podría publicar un ejemplo o darme info util? Gracias :D

        Alejandro Robleto

        Alejandro Robleto

        student•
        hace 6 años

        a mi me marca un error en el index al guardar los cambio de channelgrid me dice que no esta :/

          Juan Castro

          Juan Castro

          teacher•
          hace 6 años

          ¡Hola!

          ¿Podrías mostrarnos una captura del error? Y también tu código. Así sin esa info es muy difícil adivinar cuál es la solución. :sweat_smile::bug::pray:

        Jorge Méndez Ortega

        Jorge Méndez Ortega

        student•
        hace 6 años

        Por que siempre ponen dentro de div vacios y no utilizan fragmernt?

          Enzo Tamaquiza Murillo

          Enzo Tamaquiza Murillo

          student•
          hace 6 años

          Fragmernt es muy util cuando no quieres dañar la grid de la UI, si tu page utiliza grid como la de boostrap entonces utiliza fragmernt

          <section className='container"'> <div className='row'> {this.data.map(item => ( <> <div className='col'> </div> <div className='col'> </div> </> ))} </div> </section>
        Nico Figueroa

        Nico Figueroa

        student•
        hace 7 años

        Mmm yo hubiera hecho un componente que sea el item del podcast, dentro de ChannelGrid o reemplazarlo por channelGrid y el loop en el home, no creen ?

        Rubén Jiménez Uribe

        Rubén Jiménez Uribe

        student•
        hace 7 años

        Al guardar ChannelGrid.js a mi me marco error de que no tenía importado Link, pero en el video veo que no esta importado. What!? Bueno en mi caso lo agregue a ChannelGrid.js y removi Link del index.js, ya no lo necesita.

        Kelly Jesus Salazar Sanchez

        Kelly Jesus Salazar Sanchez

        student•
        hace 6 años

        Mi codigo

        import React from 'react' import 'isomorphic-fetch' import Layout from '../components/Layout' import ChannelGrid from '../components/ChannelGrid' const Home = ({ channels }) => ( <Layout title="Podcasts"> <ChannelGrid channels={ channels } /> </Layout> ) Home.getInitialProps = async () => { let req = await fetch('https://api.audioboom.com/channels/recommended') let { body: channels } = await req.json() return { channels } } export default Home```
        Rulo Code

        Rulo Code

        student•
        hace 6 años

        Si queremos reutilizar nuestro layout dentro de otro componente tenemos que detener presente el caso en el que el prop de title no nos llegue.

        Es un error que me sucedió y así se soluciona:

        <Head> <title>{title || ''}</title> </Head>
        Juan Reyes

        Juan Reyes

        student•
        hace 8 años

        Nunca ames a nadie de Posta jajaja

        Ivan Magdaleno

        Ivan Magdaleno

        student•
        hace 6 años

        ¿Es adecuado usar un <a> dentro de un componente <Link>?

        ¿No se supone que el componente <Link> al momento de renderizarse, genera un <a>?

          Matias Alejandro Lopez Heredia

          Matias Alejandro Lopez Heredia

          student•
          hace 6 años

          Respondió a tu duda en un video anterior en donde explicó el componente Link de Next. Este a diferencia de otros, no genera un tag a, lo que hace es inyectarle la propiedad href definida en Link a un tag a definido por el programador. En resumen, tenés que crear un tag a adentro de Link, o no te va a funcionar.

          Alberto Camarena

          Alberto Camarena

          student•
          hace 6 años

          Lo que pasa es que probablemente tu te refieres al componente Link de react router, que es diferente por ejemplo al de reach route, o en este caso next, cada libreria/framework tiene sus propios componentes y tienes que revisar su documentación para saber como usarlos, si en este caso te fueras con la finta de que es igual al de react router y no le agregas la etiqueta <a> envuelta por <link> simplemente no te serviria.

        Andres Felipe Delgado Solorzano

        Andres Felipe Delgado Solorzano

        student•
        hace 8 años

        Porqué await está encerrado entre paréntesis ?

        let clip = (await fetchClip.json()).body.audio_clip
          Roberto Gonzalez

          Roberto Gonzalez

          teacher•
          hace 8 años

          Es para tomar el .body.audio_clip del resultado del await en una sola línea. Sería equivalente a hacer:

          let clipData = await fetchClip.json() let clip = clipData.body.audio_clip
          Carlos Rivas

          Carlos Rivas

          student•
          hace 7 años

          Muy brutal tu forma de optimizar el código, @robertomgonzalez, ¿sigues alguna guía en particular o lo aprendiste de algún lado?