CursosEmpresasBlogLiveConfPrecios

Validación para LogIn LogOut

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

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

    05:26 min
  • 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
    • Martin Munilla

      Martin Munilla

      student•
      hace 5 años

      por primera vez en el curso logre entender el funcionamiento de los reducer y actions y logre codear el logout sin ver la clase

        Ramiro Sotelo

        Ramiro Sotelo

        student•
        hace 5 años

        leer estos comentarios antes de empezar la clase me motivan !

        Tomas Salina

        Tomas Salina

        student•
        hace 5 años

        Si no hubiera leído este comentario, ni siquiera lo habría intentando. Pero lo logré, gracias!!

      José Enrique Pérez Aquino

      José Enrique Pérez Aquino

      student•
      hace 5 años

      Al fin pude entender el sentido de Redux, definitivamente es necesario practicar e intentar hacer las cosas sin ayuda.

      Básicamente, la función connect recibe dos parámetros

      mapStateToProps y mapDispatchToProps

      En palabras resumidas, la primera solicita datos del store(la base de datos) y el segundo envía datos.

      Así solamente hay un flujo de datos y todo es mas simple. Me exploto la cabeza. Animo para aquellos que aun están batallando

        Luis Anibal Olivares Zarraga

        Luis Anibal Olivares Zarraga

        student•
        hace 5 años

        Diooos me acabas de dar la vida con esa explicacion, era de las cosas que no entendia de redux

        Jimmy Buriticá Londoño

        Jimmy Buriticá Londoño

        student•
        hace 5 años

        Buen comentario

      Jesús Miguel Quinto Teran

      Jesús Miguel Quinto Teran

      student•
      hace 6 años

      Reto:

      import PropTypes from 'prop-types'; ... Header.propTypes = { user: PropTypes.object }
        Miguel Angel Reyes Moreno

        Miguel Angel Reyes Moreno

        student•
        hace 5 años

        ¿Estamos validando que el usuario es un objeto?

        Christian Humberto

        Christian Humberto

        student•
        hace 4 años

        seria

        email: PropTypes.string,

        y lo mismo para el password luego se usarian de dos maneras

        props.email

        en los inputs o desestructurando

        const {email, password} = props

        y en los inputs un value={email}

      Javier Fuentes Mora

      Javier Fuentes Mora

      teacher•
      hace 6 años

      Hola creo que todo se peude poner dentro de una validacion de hasUser no necesitamos dos :

      {hasUser ? ( <> <li> <a href='/'>{user.name}</a> </li> <li> <a href='#logout' onClick={handleLogout}>Cerrar Sesión</a> </li> </> ) : ( <li> <Link to='/login'>Iniciar Sesión</Link> </li> )}```
        David Behar

        David Behar

        student•
        hace 6 años

        Yo pensé en lo mismo

        Esteban Casallas

        Esteban Casallas

        student•
        hace 5 años

        si, se ve mejor !

      Jonatan Ariste

      Jonatan Ariste

      student•
      hace 6 años

      Epico! con redux y configurando los actions manejando todo desde un mismo estado es increíble cómo se ahorra código y todo sale como magia. Hermoso!

        Oscar Barajas Tavares

        Oscar Barajas Tavares

        Team Platzi•
        hace 6 años

        Exactamente, esto permite tener un código limpio, ordenado y todo fluye.

        Henry Caicedo Velasco

        Henry Caicedo Velasco

        student•
        hace 5 años

        si, se ahorra bastante codigo.

      César Ernesto Rivas Martínez

      César Ernesto Rivas Martínez

      student•
      hace 6 años

      Nota: al principio pensé que mapDispatchToProps se tenía que llamar así por obligación, pero yo le puse mapActions e igual funciona.

      const mapActions = { logoutRequest } export default connect(mapStateToProps,mapActions)(Header)
        Luis Alberto Colunga Pérez

        Luis Alberto Colunga Pérez

        student•
        hace 6 años

        No, solo es un nombre por default para que no te confundas en ocaciones

        Fabián Antonio Salgado Sepúlveda

        Fabián Antonio Salgado Sepúlveda

        student•
        hace 5 años

        mapActions se esa en VueJS

      Marco Luna

      Marco Luna

      student•
      hace 6 años

      Este era el ejemplo que buscaba sobre como conviven ambas partes, el mapStateToProps y el mapDispatchToProps

      Andres Felipe Valencia Benitez

      Andres Felipe Valencia Benitez

      student•
      hace 6 años

      Reto:

      Header.propTypes = { user: PropTypes.object.isRequired, logoutRequest: PropTypes.any.isRequired, };
        Sofia Nupieri

        Sofia Nupieri

        student•
        hace 6 años

        Tambien podria ser mas especifico:

        logoutRequest: PropTypes.func.isRequired

        Jhonatan David Ibarra Lavado

        Jhonatan David Ibarra Lavado

        student•
        hace 6 años

        amigo porque object?

      Carlos Arboleda

      Carlos Arboleda

      student•
      hace 6 años

      Muy bien explicado, de los mejores profes, demuestra experiencia y transmite seguridad. Hacer un breve repaso al final de la clase es muy útil para atar cabos sueltos. Deberían realizarlo más seguido los otros profes cuando se abarcan varios conceptos que pueden ser confusos. 🙃

      Andrés Campuzano Garzón

      Andrés Campuzano Garzón

      student•
      hace 6 años

      🦄 Acá el código de lo que llego hasta el momento: https://github.com/AndresCampuzano/React-Router-and-Redux/commit/94290b811ed0c0a04ed723f7e6adb48c3ff5dae8

      Samuel Miranda Martínez

      Samuel Miranda Martínez

      student•
      hace 5 años

      Reto: CarouselItem.jsx

      CarouselItem.propTypes = { id: PropTypes.number, cover: PropTypes.string, title: PropTypes.string, year: PropTypes.number, contentRaiting: PropTypes.string, duration: PropTypes.number, isList: PropTypes.bool, setFavorite: PropTypes.func, deleteFavorite: PropTypes.func, };

      Header.jsx

      Header.propTypes = { user: PropTypes.object, logoutRequest: PropTypes.func, };
      Angie Garcia

      Angie Garcia

      student•
      hace 5 años
      import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import gravatar from '../utils/gravatar'; import { logoutRequest } from '../actions'; import '../assets/styles/components/Header.scss'; import logo from '../assets/static/logo-platzi-video-BW2.png'; import userIcon from '../assets/static/user-icon.png'; const Header = (props) => { const { user } = props; const hasUser = Object.keys(user).length > 0; const handleLogout = () => { props.logoutRequest({}); }; return ( <header className='header'> <Link to='/'> <img className='header__img' src={logo} alt='Platzi Video' /> </Link> <div className='header__menu'> <div className='header__menu--profile'> {hasUser ? <img src={gravatar(user.email)} alt={user.email} /> : <img src={userIcon} alt='iconodeusuario' />} <p>Perfil</p> </div> <ul> {hasUser ? <li><a href='/'>{user.name}</a></li> : null} {hasUser ? <li><a href='#logout' onClick={handleLogout}>Cerrar Sesión</a></li> : ( <li> <Link to='/Login'> Iniciar sesión </Link> </li> )} </ul> </div> </header> ); }; const mapStateToProps = (state) => { return { user: state.user, }; }; const mapDispactchToProps = { logoutRequest, }; Header.propTypes = { user: PropTypes.object, logoutRequest: PropTypes.func.isRequired, }; export default connect(mapStateToProps, mapDispactchToProps)(Header);
      Christian Michael Rosales

      Christian Michael Rosales

      student•
      hace 6 años
      import PropTypes from 'prop-types'; Header.propTypes = { user: PropTypes.object, logoutRequest: PropTypes.func, };
      Miguel de la Rosa

      Miguel de la Rosa

      student•
      hace 5 años

      para que sirve la parte de object.keys(user) ?

        Stefania Amortegui Cardenas

        Stefania Amortegui Cardenas

        student•
        hace 5 años

        Cuando tienes un objeto tipo { key : value } como el siguiente

        const myObject = {name: "PePIto", age: 100}

        y quieres obtener solamente las key de ese objeto usas

        Object.keys(myObject)

        esto va a retornar un array con las key que tiene ese objeto

        [ "name", "age"]

        y como devuelve un array podemos usar la propiedad length para saber la longitud de ese array

        const longitud = Object.keys(myObject).length
        console.log(longitud) 2

        y podemos jugar con las condiciones

        Object.keys(myObject).length > 0 true
        Object.keys(myObject).length > 10 false
      Sofia Nupieri

      Sofia Nupieri

      student•
      hace 6 años

      El user.name no tiene ningun valor

        Marco Mesén Campos

        Marco Mesén Campos

        student•
        hace 6 años

        Valida que el input del login tenga el name, sino nunca se guardará de manera correcta

      DAMIÁN NICOLAS PINEDO

      DAMIÁN NICOLAS PINEDO

      student•
      hace 5 años

      dispatch es el valor que nos regresara? y el map state es lo que nosotros enviamos? o como

      Daniel Ruiz

      Daniel Ruiz

      student•
      hace 5 años

      Que son proptypes?, no entiendo el reto que nos pone al final del video

        sergio enrique sanhueza osorio

        sergio enrique sanhueza osorio

        student•
        hace 5 años

        Nos sirve para verificar los tipos de las propiedades de los componentes, De esta forma, en desarollo, podemos saber si estamos pasándole al componente los tipos de datos correctos. Es similar a TypeScript.....

        Te dejo un enlace que tiene algo de info al respecto:

        haz clic aquí

        Daniel Ruiz

        Daniel Ruiz

        student•
        hace 5 años

        Gracias por la explicacion ¿hay algun curso en platzi queprofundice en el tema?

      Imelda Antonia Barrios Morales

      Imelda Antonia Barrios Morales

      student•
      hace 5 años

      Reto

      import PropTypes from 'prop-types'; Header.propTypes = { user: PropTypes.object, logoutRequest: PropTypes.func, };
      Francisco Imanol Suarez

      Francisco Imanol Suarez

      student•
      hace 6 años

      Reto

      import PropTypes from 'prop-types';
      Header.propTypes = { user: PropTypes.object, logoutRequest: PropTypes.func.isRequired, };```
      Alejandro González Reyes

      Alejandro González Reyes

      student•
      hace 6 años

      Porque al redireccionar dentro de este componente Header no deja

      const handleLogout = (event) => { event.preventDefault(); // La data pasada al store es un objeto vacio (el usuario hizo logout) props.logoutRequest({}); props.history.push('/login'); };
        Oscar Barajas Tavares

        Oscar Barajas Tavares

        Team Platzi•
        hace 6 años

        Podrías compartirme tu repositorio del proyecto para revisarlo a detalle.

        Daniel Esteves

        Daniel Esteves

        student•
        hace 6 años

        ¡Hola! Sería super excelente que nos compartieras el enlace a tu repositorio y podamos ver en que está dando el error :muscle:

    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