CursosEmpresasBlogLiveConfPrecios

Register con Redux

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

    Viendo ahora
  • 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 examen
    David Behar

    David Behar

    student•
    hace 6 años

    Falta la parte de mapDispatchToProps

    .

    const mapDispatchToProps = { registerRequest, }; export default connect(null, mapDispatchToProps)(Register);
      Carlos Spagnoletti

      Carlos Spagnoletti

      student•
      hace 6 años

      Genial David, gracias por el aporte. ahora me funciona. Saludos y gracias.

      Freddy Córdova Arana

      Freddy Córdova Arana

      student•
      hace 6 años

      Genial David, gracias a tu aporte pude continuar sin problemas

    Alejandro González Reyes

    Alejandro González Reyes

    student•
    hace 6 años

    Les comparto mi componente con explicaciones detalladas para su correcto funcionamiento.

    // Indico que este componente va a tener estado propio import React, { useState } from 'react'; import { Link } from 'react-router-dom'; // 1. Importar modulo para conectar el componente con el store import { connect } from 'react-redux'; // 2. Importar las acciones a ejecutar en el store a través de este componente import { registerRequest } from '../actions'; import '../assets/styles/components/Register.scss'; // 5. El componente ejecuta acciones contra el store, por tanto activo sus props const Register = (props) => { // Declaro el estado inicial del componente (la propiedad form representa toda el formulario, por ello le paso un objeto con el valor de incio de cada uno de sus campos) const [form, setValues] = useState({ name: '', email: '', password: '', }); // Funcion controladora de evento que se dispara cuando uno de los campos de formulario cambia su valor. (onChange) const handleInput = (event) => { // Establezco el nuevo estado del componente segun los valores actuales de cada input, pero conservando los anteriores (destructuración) setValues({ ...form, [event.target.name]: event.target.value, }); }; // Función controladora de evento que se ejecuta tras dispararse el envio del formulario const handleSubmit = (event) => { event.preventDefault(); // 6. Disparamos la acción registrar el usuario en el store props.registerRequest(form); // Redireccionar a otra ruta. props.history.push('/'); }; return ( <section className='register'> <section className='register__container'> <h2 className='register__title'>Regístrate</h2> <form className='register__container--form' onSubmit={handleSubmit}> <input name='name' type='text' className='input' placeholder='Nombre' onChange={handleInput} /> <input name='email' type='text' className='input' placeholder='Correo Electrónico' onChange={handleInput} /> <input name='password' type='password' className='input' placeholder='Contraseña' onChange={handleInput} /> <button type='submit' className='button'>Registrarme</button> </form> <p className='register__container--login'> Ya tienes una cuenta. <Link to='/login'>Inicia sesión</Link> </p> </section> </section> ); }; // 4. Establecer que acciones llevará a cabo este componente en el store const mapDispatchToProps = { registerRequest, }; // 3. Conectar el componente con el store export default connect(null, mapDispatchToProps)(Register);
      Oscar Barajas Tavares

      Oscar Barajas Tavares

      Team Platzi•
      hace 6 años

      Gran aporte, cuando termines tu aplicación y si haz documentado de esta forma compartenos tu repositorio.

      sue herrera

      sue herrera

      student•
      hace 6 años

      ¡increíble! muchas gracias :D <3

    Jhonatan David Ibarra Lavado

    Jhonatan David Ibarra Lavado

    student•
    hace 6 años

    estupendo ajjaj , casi me estreso, me faltaba

    const mapDispatchToProps = { registerRequest, }; export default connect(null, mapDispatchToProps)(Register);

      Javier Armando Vargas Vega

      Javier Armando Vargas Vega

      student•
      hace 6 años

      Me ocurrió lo mismo. pero los comentarios me ayudaron para solucionarlo.

      En el video no se mostró la parte de mapDispatchToProps

      Angel Santillan Brambila

      Angel Santillan Brambila

      student•
      hace 6 años

      jajaja me imagino, yo no tanto porque tenia la consola abierta y vi que me dijo que la funcion registerRequest no era una funcion luego luego vi que me faltaba esa parte .saludos

    Andrés Campuzano Garzón

    Andrés Campuzano Garzón

    student•
    hace 6 años

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

    Sergio Andres Rios Pabon

    Sergio Andres Rios Pabon

    student•
    hace 6 años

    creo que en el vídeo no explica la parte del mapDispatchtoProps, para que tengan cuidado y no les arroje el error a la hora de colocar los datos del registro en el estado.

      Marcos Iglesias

      Marcos Iglesias

      student•
      hace 6 años

      deberia quedar asi:

      const mapDispatchToProps = { registerRequest, }

      export default connect(null, mapDispatchToProps)(Register);

      Luis Antonio Rodriguez Garcia

      Luis Antonio Rodriguez Garcia

      student•
      hace 6 años

      Si, lo cortaron del vídeo, pero se alcanza a leer en el minuto 1:58

    Diego Rodriguez

    Diego Rodriguez

    student•
    hace 5 años

    tambien en vez de obtener history como props, se puede usar el custom hook de react router asi

    import { useHistory } from 'react-router-dom const history = useHistory() history.push('/')
    Irungaray Agustin

    Irungaray Agustin

    student•
    hace 5 años

    A alguien mas le pasa que el Gravatar a veces no funciona?

      Andrés Felipe Eslava Zuluaga

      Andrés Felipe Eslava Zuluaga

      student•
      hace 5 años

      Revisa bien el nombre de la acción y la función de gravatar. Para que lo entiendas mejor te aconsejo que uses console.log() en cada cosa para que veas qué puede suceder.

      Martin Paez

      Martin Paez

      student•
      hace 5 años

      Podrias ser mas especifico en tu error?. Yo siempre uso un correo que tengo registrado en gravatar y siempre me respeta la imagen. Si uso cualquier otro que no, muestra una imagen generica de base.

    Alan Alexis Arostegui Maranto

    Alan Alexis Arostegui Maranto

    student•
    hace 6 años
    Conectaremos el componente register con todo el flujo de redex. Primero conectamos con redux, haciendo el import connect import { connect } from 'react-redux'; exportamos. export default connect(null, mapDispatchToProps)(Register); Despues creamos un action que debe de encargarse de mandar la informacion que estamos capturando de los inputs cuando el usuario crea su cuenta y mandarlo a nuestro estado global por medio del reducer. export const registerRequest = payload => ({ type: 'REGISTER_REQUEST', payload }) Importamos en nuestro componente Register. import { registerRequest } from '../redux/actions' Una vez importado podemos pasarlo como props en la funcion y utilizarlo en la funcion handleSubmit como props junto con el formulario. Despues creamos el reducer que se encargará de obtener esa informacion y mandarla al estado. case 'REGISTER_REQUEST': return { ...state, user: action.payload } Con history reedireccionamos a nuestro usuario a la raiz del proyecto una vez que su registro haya sido exitoso. const handleSubmit = e => { e.preventDefault(); props.registerRequest(form) props.history.push('/') }```
    Sebastián Buitrago

    Sebastián Buitrago

    student•
    hace 5 años

    se puede hacer el llamado de loginRequest y logoutRequest en un mismo componente ya que en mi caso use condicionales para adaptar el mismo diseño sin crear dos componentes diferentes pero me da este error usando redux

    [aqui dejo link con el codigo del componente] (https://github.com/jasba24/PlatziVideoReact/blob/router-redux/src/components/FormLogin.jsx)

      Sebastián Buitrago

      Sebastián Buitrago

      student•
      hace 5 años

      Si es posible, solo no me funcionaba porque tenia un typo pero pude usar los dos actions en el mismo componente

    Carlos Luis Marin

    Carlos Luis Marin

    student•
    hace 5 años

    Sin duda alguna es bueno repetir los vídeos, a la primera puede ser abrumador pero poco a poco se van dando las cosas

    Miguel Angel Reyes Moreno

    Miguel Angel Reyes Moreno

    student•
    hace 5 años

    Los cambios: index.js de actions:

    export const actions = { setFavorite: 'SET_FAVORITE', deleteFavorite: 'DELETE_FAVORITE', loginRequest: 'LOGIN_REQUEST', logoutRequest: 'LOGOUT_REQUEST', registerRequest: 'REGISTER_REQUEST', };

    index.js en reducers:

    case actions.registerRequest: return { ...state, user: action.payload, };

    Register.jsx:

    import React, { useState } from 'react'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; import { registerRequest } from '../actions'; const Register = (props) => { const [form, setValues] = useState({ email: '', name: '', password: '', }); const handleInput = (event) => { setValues({ ...form, [event.target.name]: event.target.value, }); }; const handleSubmit = (event) => { event.preventDefault(); props.registerRequest(form); props.history.push('/'); }; }; const mapDispatchToProps = { registerRequest, }; export default connect(null, mapDispatchToProps)(Register);
    Rubén Jiménez Torres

    Rubén Jiménez Torres

    student•
    hace 6 años

    Falta esa parte en el vídeo. :)

    const mapDispatchToProps = { registerRequest, };```
    Karen Paola Diaz Duarte

    Karen Paola Diaz Duarte

    student•
    hace 5 años

    practica: antes me salía error pero con el comentario de un compañero lo pude arreglar. comentario: hace falta este pedacito de código en register.jsx

    const mapDispatchToProps = { registerRequest, };

    export default connect(null, mapDispatchToProps)(Register);

    29.png
    Noe Adrián Acuña Prado

    Noe Adrián Acuña Prado

    student•
    hace 6 años

    esta vez me adelante porque estoy viendo que cuando lo sigo sin intentarlo antes me cuesta trabajo entenderle despues aqui esta el codigo

    import React, {useState} from 'react'; import '../assets/styles/components/Register.scss'; import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import { registerRequest } from '../actions/index' const Register = (props) => { const [form, setForm] = useState({ name : '', email : '', password : '', }) const handleInput = ( event ) => { setForm({ ...form, [event.target.name] : event.target.value, // target.name toma el nombre del elemento que lo llame }) // por ejemplo name ='password' } const handleSubmit = ( event ) => { event.preventDefault() console.log(form) registerRequest({form}) props.history.push('/') } return ( <section className="register"> <section className="register__container"> <h2>Regístrate</h2> <form className="register__container--form" onSubmit = {handleSubmit}> <input name='name' className="input" type="text" placeholder="Nombre" onChange={handleInput} /> <input name='email' className="input" type="text" placeholder="Correo" onChange={handleInput} /> <input name = 'password' className="input" type="password" placeholder="Contraseña" onChange={handleInput} /> <button className="button">Registrarme</button> </form> <Link to="/login"> Iniciar sesión </Link> </section> </section> ) }; const mapDispatchToProps = { registerRequest, } export default connect(null,mapDispatchToProps)(Register)```
    Ginnio Sarabia

    Ginnio Sarabia

    student•
    hace 6 años

    ¿al usar el operador ternario es posible retornar varias lineas de html y no solo una?

      Carlos David Ramírez Gómez

      Carlos David Ramírez Gómez

      student•
      hace 6 años

      Puedes retornar una pero puede ser un div con varios hijos o si necesitas varias validaciones puedes anidarlas como else if por ejemplo

      { hasUser ? &lt;User&gt; : (hasPhoto ? &lt;Photo /&gt; : ( hasSomething ) ? &lt;Something /&gt; : &lt;etc..../&gt; ) }
      Ginnio Sarabia

      Ginnio Sarabia

      student•
      hace 6 años

      Si. Muchas gracias utilizando un <div></div>

    Camilo Echeverry

    Camilo Echeverry

    student•
    hace 5 años

    La parte que falta del código se puede ver al minuto 1:58, pero la pasa sin explicar ... Por eso al profesor le funciona sin errores la aplicación.

    Fidel Evangelista

    Fidel Evangelista

    student•
    hace 5 años
    error.png

    Ayuda con este error!

      Ismael Grimaldo Vega

      Ismael Grimaldo Vega

      student•
      hace 5 años

      Hola, Fidel. Puedes compartirnos el código de tu archivo index.js?

      Ramses Garate

      Ramses Garate

      student•
      hace 5 años

      Creo que el error es porque la carpeta se llama utils con s al final, lo que sucede es que estas tratando de importar un archivo y este no se encuentra en el directorio que tu estas especificando, prueba con revisar eso.

    Jose Nuñez

    Jose Nuñez

    student•
    hace 3 años

    ¿Que diferencia hay de hacerlo así? Usando el dispatch

    const mapDispatchToProps = (dispath)=>({ setPokemons: (value)=> dispath(setPokemmonsActions(value)) })

    En lugar de como lo hizo el profesor?

    const mapDispatchToProps = { registerRequest, };

    Lo miré en el curso avanzado de react redux :)

    Tulio Junior Rangel Nuñez

    Tulio Junior Rangel Nuñez

    student•
    hace 4 años

    Por alguna razón no me lee el push para enviarme al home :/ Alguien con el mismo problema?

      Edgar Andrés Angrino Lafaux

      Edgar Andrés Angrino Lafaux

      student•
      hace 4 años

      Joven si usted esta usando la ultima version de React Router Dom ese metodo de usar push ya no sirve debe importar de react-router-dom esta funcion useNavigate

      import { useNavigate } from "react-router-dom"; const navigate = useNavigate(); navigate("/");
      Samuel Jose Vega Do Lugar

      Samuel Jose Vega Do Lugar

      student•
      hace 4 años

      Yo lo implementé así en Register.jsx:

      import { useNavigate } from "react-router-dom"; function withRouter(Component) { function ComponentWithRouterProp(props) { const navigate = useNavigate(); return ( <Component {...props} navigate={navigate} /> ); }

      Luego la función de handleSubmit

      const handleSubmit = event => { event.preventDefault(); props.registerRequest(form); props.navigate('/'); }

      Y luego en la parte inferior del archivo:

      const mapDispatchToProps = { registerRequest, }; export default withRouter(connect(null, mapDispatchToProps)(Register));
    Ginnio Sarabia

    Ginnio Sarabia

    student•
    hace 6 años

    Si el sistema es grande el archivo ACTIONS y REDUCERS crecerá muchisimo? O como manejarlo?

      Juan Castro

      Juan Castro

      teacher•
      hace 6 años

      Te recomiendo darle un vistazo a esta lectura: https://platzi.com/blog/estructura-organizacion-y-tipos-de-componentes-en-react/.

      Frank Torres

      Frank Torres

      student•
      hace 5 años

      Siempre puedes organizar la estructura de tu proyecto por componentes o funcionalidades principales, así puedes agrupar acciones y reducers según a que contexto corrrespondan.

      - /redux - /reducers - login.js - clases.js - foro.js - /acciones - login.js - clases.js - foro.js```

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