CursosEmpresasBlogLiveConfPrecios

Vista general del player

Clase 23 de 29 • Curso de React Router 5 y Redux

Clase anteriorSiguiente clase

Contenido del curso

Bienvenida al curso

  • 1
    Todo lo que aprenderás sobre React Router y Redux

    Todo lo que aprenderás sobre React Router y Redux

    01:30 min

¿Qué es React Router? y Aplicarlo en tus proyectos

  • 2
    ¿Qué es React Router y cómo instalarlo?

    ¿Qué es React Router y cómo instalarlo?

    02:54 min
  • 3
    Crear nuestro archivo de Rutas

    Crear nuestro archivo de Rutas

    07:33 min
  • 4
    Container: Login

    Container: Login

    10:29 min
  • 5
    Container: Register

    Container: Register

    06:28 min
  • 6
    Container: 404 Not Found

    Container: 404 Not Found

    06:43 min
  • 7
    Componente: Layout

    Componente: Layout

    05:10 min
  • 8
    Manejando enlaces y configuraciones

    Manejando enlaces y configuraciones

    06:33 min

¿Qué es Redux?

  • 9
    Qué es Redux

    Qué es Redux

    02:17 min
  • 10

    ¿Qué es Redux? Profundizando en la herramienta

    01:32 min
  • 11
    Instalación de Redux

    Instalación de Redux

    04:40 min
  • 12
    Creando el Store de Redux

    Creando el Store de Redux

    12:53 min

Aplicando Redux a nuestra aplicación

  • 13
    Creando los reducers

    Creando los reducers

    10:40 min
  • 14
    Finalizando reducers y eliminar favoritos

    Finalizando reducers y eliminar favoritos

    08:26 min
  • 15
    Debuggeando nuestro proyecto (agregando validaciones a nuestro componente card)

    Debuggeando nuestro proyecto (agregando validaciones a nuestro componente card)

    04:19 min
  • 16
    Crear Formulario de Login

    Crear Formulario de Login

    10:08 min
  • 17
    Formulario de Login con Redux

    Formulario de Login con Redux

    06:28 min
  • 18
    Creando un Servicio para Gravatar

    Creando un Servicio para Gravatar

    05:28 min
  • 19
    Uso de gravatar en nuestro proyecto

    Uso de gravatar en nuestro proyecto

    07:16 min
  • 20
    Validación para LogIn LogOut

    Validación para LogIn LogOut

    09:15 min
  • 21
    Register

    Register

    07:00 min
  • 22
    Register con Redux

    Register con Redux

    04:17 min
  • 23
    Vista general del player

    Vista general del player

    Viendo ahora
  • 24
    Arreglando la funcionalidad del player

    Arreglando la funcionalidad del player

    06:55 min
  • 25
    Terminando de detallar nuestro player

    Terminando de detallar nuestro player

    13:50 min
  • 26
    Validaciones

    Validaciones

    10:35 min
  • 27
    Validaciones de UI

    Validaciones de UI

    07:04 min
  • 28
    Debug con Redux Devtools

    Debug con Redux Devtools

    05:57 min

Cierre del curso

  • 29
    Cierre del Proyecto

    Cierre del Proyecto

    00:39 min
  • Tomar el examen del curso
    • Ricardo Celis

      Ricardo Celis

      teacher•
      hace 6 años

      https://static.platzi.com/media/tmp/class-files/git/escuela-js/escuela-js-0b8424b25f04a305cf0666a8b91ebf74b9f2140e/src/assets/styles/components/Player.scss les dejo el acceso directo al archivo!

        Carlos David Ramírez Gómez

        Carlos David Ramírez Gómez

        student•
        hace 6 años

        ¿Este es tú heroe? El mío sí

        Jose Daniel Molina

        Jose Daniel Molina

        student•
        hace 5 años

        Gracias, la salvacion!

      Lluis Pitarch Ripolles

      Lluis Pitarch Ripolles

      student•
      hace 6 años

      Os recomiendo el plugin para VSC de Simple React Snippets

      con 'imr' => import react from 'react' con 'sfc' => se crea la estructura de un stateless component con 'cc' => se crea la estructura de un componente completo

      Super rápido para agilizar el flujo de trabajo

        Jose Daniel Molina

        Jose Daniel Molina

        student•
        hace 5 años

        Excelente aporte, muchas gracias

        Victor Baruch Pazaran Jaimes

        Victor Baruch Pazaran Jaimes

        student•
        hace 5 años

        genial, justo estaba pensando si existía algo así

      José Alejandro Muñoz Ruiz

      José Alejandro Muñoz Ruiz

      student•
      hace 6 años

      Player.scss con SASS

      .Player { video { object-fit: cover; width: 100vw; height: 100vh; z-index: 0; position: absolute; top: 0; left: 0; &:hover .Player-back { display: block; } } &-back { position: fixed; top: 5px; left: 5px; font-size: 12px; button { text-decoration: none; color: white; background: rgba(0, 0, 0, 0.3); padding: 5px; border-radius: 5px; border: 0; outline: 0; cursor: pointer; } } }
      Andrés Campuzano Garzón

      Andrés Campuzano Garzón

      student•
      hace 6 años

      🦄 Acá el código hasta el momento: https://github.com/AndresCampuzano/React-Router-and-Redux/commit/101d0f219d68788a095640e5ebae10112712a3fa

        Alexander Nova Arevalo

        Alexander Nova Arevalo

        student•
        hace 6 años

        Siempre me ayudo estos commits

        Andrés Campuzano Garzón

        Andrés Campuzano Garzón

        student•
        hace 6 años

        Un gusto Alex

      Alan Alexis Arostegui Maranto

      Alan Alexis Arostegui Maranto

      student•
      hace 6 años

      Creamos Player.jsx en dentro de containers. Creamos la logica de estructura y scss de nuestro player. En routes añadimos una nueva ruta para nuestro player y le pasamos un id (es decir, una propiedad a nuestra ruta) <Route exact path="/player/:id" component={Player} /> y lo importamos import Player from '../containers/Player'; Despues hacemos Link al icon de play que se encuentra en carousel Item. <Link to={/player/${id}}> <img className="carousel-item__details--img" src={playIcon} alt="Play Icon" />
      </Link> De esta manera creamos una url por cada uno de los elementos que se esta iterando

      Camilo Eduardo Gomez Davila

      Camilo Eduardo Gomez Davila

      student•
      hace 6 años

      Tuve que poner

      controls={true}

      para que no me generara un warning, no se si es correcto, pero funciona

      import React from 'react' const Player = () => { return( <div className="Player"> <video controls={true} autoPlay> <source src="" type="video/mp4" /> </video> <div className="Player-back"> <button type="button"> Regresar </button> </div> </div> ) } export default Player```
      Marcelo Oggero

      Marcelo Oggero

      student•
      hace 5 años

      Falto importar el scss del Player. Yo lo cargué así: import '../assets/styles/components/Player.scss';

        Marcelo Oggero

        Marcelo Oggero

        student•
        hace 5 años

        Me respondo solo justo en el siguiente video lo importa.🤦‍♂️

      Platzi Team

      Platzi Team

      student•
      hace 5 años

      Que col es cuando no debes ver el video si no simplemente con lo que dice el profesor ya sabes que esta haciendo y que debes hacer 😍

      Jorge Alberto Rodriguez Flores

      Jorge Alberto Rodriguez Flores

      student•
      hace 5 años

      Player.scss

      video { object-fit: cover; width: 100vw; height: 100vh; z-index: 0; position: absolute; top: 0; left: 0; } video:hover .Player-back { display: block; } .Player-back { position: fixed; top: 5px; left: 5px; font-size: 12px; } .Player-back button { text-decoration: none; color: white; background: rgba(0, 0, 0, .3); padding: 5px; border-radius: 5px; border: 0; outline: 0; cursor: pointer; }
      Wilmar Yoan Malaver Malaver

      Wilmar Yoan Malaver Malaver

      student•
      hace 5 años

      para que cargen los estilos por si a alguien le sirve. :3

      Player.jsx

      import '../assets/styles/components/Player.scss';
      Jaime David Burbano Montoya

      Jaime David Burbano Montoya

      student•
      hace 5 años
      video { object-fit: cover; width: 100vw; height: 100vh; z-index: 0; position: absolute; top: 0; left: 0; } video:hover .Player-back { display: block; } .Player-back { position: fixed; top: 5px; left: 5px; font-size: 12px; } .Player-back button { text-decoration: none; color: white; background: rgba(0, 0, 0, .3); padding: 5px; border-radius: 5px; border: 0; outline: 0; cursor: pointer; }
      Cesar Antonio

      Cesar Antonio

      student•
      hace 5 años

      Respecto a los dos puntos, ¿Todo lo que siga va a ser una propiedad, o es que va a diferenciar de algún posible slash que le continúe para determinar el fin de su designación?

        Khevin Efraín

        Khevin Efraín

        student•
        hace 5 años

        Va atrapar todo lo que siga a menos se especifique una nueva ruta después de un slash. Para esto puedes seguir añadiendo los dos puntos

        carbon.png

        Cesar Antonio

        Cesar Antonio

        student•
        hace 5 años

        Gracias compañero :-)

      Jose Daniel Molina

      Jose Daniel Molina

      student•
      hace 5 años

      Y si usamos el player que hicimos en el curso profesional de JavaScript, sería todo un reto, además lo podemos instalar como una dependencia con npm...

        Victor Baruch Pazaran Jaimes

        Victor Baruch Pazaran Jaimes

        student•
        hace 5 años

        yo hice una implementación para mostrar los videos que sacamos del API en otro de los cursos

        video.JPG
        Jose Daniel Molina

        Jose Daniel Molina

        student•
        hace 5 años

        Quiero hacer eso también, de hecho hasta he pensado en usar la API de YouTube

      Laura Camila Pregonero

      Laura Camila Pregonero

      student•
      hace 5 años

      Good Class!!! ..........

      ..................... ..........
      ............... ................
      ................... .....................

      Lalo Díaz

      Lalo Díaz

      student•
      hace 5 años

      Pueden agregar un Link para regresar a la vista principal desde el Player `<Link to="/"> <button type="button"> Regresar </button>

      </Link>`
      Jhonatan David Ibarra Lavado

      Jhonatan David Ibarra Lavado

      student•
      hace 6 años

      estupendo, es muy agradable repasar la clase

      Diego Alejandro Cifuentes Arango

      Diego Alejandro Cifuentes Arango

      student•
      hace 5 años

      Me dice que encuentra el video (:

      App.js

      import React from "react"; import { BrowserRouter, Route, Switch } from "react-router-dom"; import Home from "../containers/Home"; import Login from "../containers/Login"; import Register from "../containers/Register"; import NotFound from "../containers/NotFound"; import Layout from "../components/Layout"; import Player from "../containers/Player"; const App = () => ( <BrowserRouter> <Layout> <Switch> <Route exact path="/" component={Home} /> <Route exact path="/login" component={Login} /> <Route exact path="/register" component={Register} /> <Route exact path="player/:id" component={Player} /> <Route component={NotFound} /> </Switch> </Layout> </BrowserRouter> ); export default App;import React from "react"; import { BrowserRouter, Route, Switch } from "react-router-dom"; import Home from "../containers/Home"; import Login from "../containers/Login"; import Register from "../containers/Register"; import NotFound from "../containers/NotFound"; import Layout from "../components/Layout"; import Player from "../containers/Player"; const App = () => ( <BrowserRouter> <Layout> <Switch> <Route exact path="/" component={Home} /> <Route exact path="/login" component={Login} /> <Route exact path="/register" component={Register} /> <Route exact path="player/:id" component={Player} /> <Route component={NotFound} /> </Switch> </Layout> </BrowserRouter> ); export default App;

      Player.js

      import React from "react"; import "../assets/styles/components/Player.scss"; const Player = () => { return ( <div className="Player"> <video controls autoPlay> <source src="" type="video/mp4" /> </video> <div className="Player-black"> <button type="button">Regresar</button> </div> </div> ); }; export default Player;

      carouselItem.js

      import React from "react"; import { connect } from "react-redux"; import { Link } from "react-router-dom"; import { setFavorite, deleteFavorite } from "../actions"; import PropTypes from "prop-types"; import "../assets/styles/components/CarouselItem.scss"; import playIcon from "../assets/static/play-icon.png"; import plusIcon from "../assets/static/plus-icon.png"; export const CarouselItem = props => { const { id, cover, title, year, contentRating, duration, isList } = props; const handleSetFavorite = () => { props.setFavorite({ id, cover, title, year, contentRating, duration }); document.getElementById(id).style.display = "none"; }; const handleDeleteFavorite = itemId => { props.deleteFavorite(itemId); document.getElementById(id).style.display = "inline"; }; return ( <div className="carousel-item"> <img className="carousel-item__img" src={cover} alt={title} /> <div className="carousel-item__details"> <div> <Link to={`/player/${id}`}> <img className="carousel-item__details--img" src={playIcon} alt="Play Icon" /> </Link> {isList ? ( <img className="carousel-item__details--img" src="https://static.platzi.com/media/public/uploads/remove-icon_a56b8107-2c02-49ed-bead-308031b0dd76.png" alt="Plus Icon" onClick={() => handleDeleteFavorite(id)} /> ) : ( <img className="carousel-item__details--img" src={plusIcon} alt="Plus Icon" onClick={handleSetFavorite} id={id} /> )} </div> <p className="carousel-item__details--title">{title}</p> <p className="carousel-item__details--subtitle">{`${year} ${contentRating} ${duration}`}</p> </div> </div> ); }; CarouselItem.propTypes = { cover: PropTypes.string, title: PropTypes.string, year: PropTypes.number, contentRaiting: PropTypes.string, duration: PropTypes.number }; const mapDispatchToProps = { setFavorite, deleteFavorite }; export default connect( null, mapDispatchToProps )(CarouselItem);
        Héctor Eduardo López Carballo

        Héctor Eduardo López Carballo

        student•
        hace 5 años

        Genial, Diego! Te ha gustado este curso hasta ahora?

        Diego Alejandro Cifuentes Arango

        Diego Alejandro Cifuentes Arango

        student•
        hace 5 años

        Hombre, he agregado unos conocimientos pardisimos, no me gusto, me encanto, y me emociona más saber que ya casi llego a la lógica de backend, porque aunque suene un poco ilógico, sin la lógica del backend no podrás expandir tu fronted, así que, a seguir practicando !

      Alejandro González Reyes

      Alejandro González Reyes

      student•
      hace 6 años

      Envío mi código para que puedan auxiliarme con respecto a la primer pregunta que hice en una entrada anterior

      import React from 'react'; import '../assets/styles/components/Player.scss'; const Player = (props) => { const handleBack = (event) => { event.preventDefault(); props.history.goBack(); }; return ( <div className='Player'> <video controls autoPlay> <source src='' type='video/mp4' /> </video> <div className='Player-back'> <button type='button' onClick={handleBack}>Regresar</button> </div> </div> ); }; export default Player;
        Juan Castro

        Juan Castro

        teacher•
        hace 6 años

        ¿Puedes ir a la pregunta anterior y responderte a ti mismo con el código? Así sabemos tu pregunta y buscamos la respuesta. . O aquí mismo. ¿Cuál es tu pregunta?

      Alejandro González Reyes

      Alejandro González Reyes

      student•
      hace 6 años

      Tengo una duda Todo se comporta correctamente

      2019-09-12-202038_1366x768_scrot.png

      Sin embargo, al presionar f5 o abrir directamente la página mediante la URL marca un error

      2019-09-12-202004_1366x768_scrot.png

      Pero esto no pasa con los demas containers, solo con Player.jsx

        Oscar Barajas Tavares

        Oscar Barajas Tavares

        Team Platzi•
        hace 6 años

        Hay un reto para darle solución a este problema.

        Juan Jose Vega

        Juan Jose Vega

        student•
        hace 6 años

        En la siguiente clase se soluciona el bug.

      sergio enrique sanhueza osorio

      sergio enrique sanhueza osorio

      student•
      hace 5 años

      Porque en nuestro archivo de rutas el path que pasamos tiene un ' : ' y en el componente carousel item no lo tiene?

    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