No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Code review: React Context y FormData

6/9
Recursos

¿Cómo crear un formulario de usuario efectivo en React?

Diseñar un formulario de usuario es un aspecto esencial en la creación de aplicaciones en React. Este proceso no solo implica presentar campos donde los usuarios puedan ingresar información, sino también capturar estos datos para su uso posterior, asegurando que se almacenen de manera correcta en el estado global y en el almacenamiento local de la aplicación.

¿Cuáles son los pasos esenciales para crear un formulario de usuario?

El proceso para crear un formulario de usuario efectivo puede desglosarse en varios pasos claros:

  1. Crear el HTML del formulario:

    • Utiliza una etiqueta <form> como contenedor principal.
    • Asegúrate de incluir referencias (useRef en React) para cada campo de entrada.
    • Agrega campos de entrada para el nombre, correo electrónico y contraseña.
    • Integra un botón de envío con un evento de click que llamará a una función para capturar la información.
  2. Capturar la información del usuario:

    • Usa la función useRef de React para referenciar los campos del formulario.
    • Captura los datos de las entradas (nombre, email, password) dentro de la función activada por el botón de envío.
    • Realiza un console.log para verificar que la información se captura correctamente (recomendado solo durante el desarrollo).

¿Cómo asegurar una buena gestión del estado y el almacenamiento local?

Gestión eficiente del estado y almacenamiento local asegura que la información de los usuarios se maneje de manera segura y accesible para su uso futuro:

  1. Almacenar los datos en localStorage:

    • Tras la captura de datos, almacena los detalles del usuario (nombre, correo electrónico y contraseña) en el localStorage bajo la clave adecuada, por ejemplo, account.
  2. Actualizar el estado global:

    • Cambia el estado de la variable signOut a false después del registro exitoso, indicando que el usuario está ahora autenticado.
    • Redirige al usuario a la página principal de la aplicación mediante navigate a home.
  3. Automatizar la funcionalidad de sign-in:

    • Configura el handle sign-in para gestionar cambios en localStorage y estado global.
    • Integra una función que habilite automáticamente el sign-in una vez que los datos sean validados y almacenados.

¿Qué hay de las mejores prácticas en el manejo de pull requests?

Asegurar la limpieza y funcionalidad del código es crucial en el proceso de revisión de código, especialmente al trabajar con equipos que colaboran a través de pull requests:

  • Mantén el código limpio y aclarado:

    • Evita dejar comentarios innecesarios o console.log en el código final.
    • Asegúrate de que cada cambio en un pull request esté bien documentado y justificado.
  • Garantiza el funcionamiento del flujo de trabajo completo:

    • Realiza pruebas exhaustivas para verificar que todos los aspectos del formulario y el manejo de datos funcionen correctamente antes de proceder a integrar cambios significativos.

Implementar estas estrategias no solo garantiza la creación de formularios efectivos, sino también un manejo seguro y eficiente de la información del usuario dentro de una aplicación React. En futuras lecciones, exploraremos cómo implementar la protección de rutas para mejorar aún más la seguridad de la app. ¡Sigue practicando y mejorando tu habilidad en React!

Aportes 10

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Bueno, se que esto es algo que cada uno debería estudiar por su cuenta, pero lo explicaré como lo entendí, mi aporte.

FormData es una Web API que crea una estructura con los valores del formulario (No está disponible solo en React, sino en cualquier archivo js). La ref que se crea del form no es una ref como la que normalmente se aplica a un input; normalmente cuando agregamos una ref a un input, podemos acceder al value haciendo inputRef.current.value; en este caso, la ref del form tiene todos los inputs adentro, pero no se puede acceder a sus valores con un form.current.value; FormData entonces crea una estructura de pares llave-valor que contiene esos valores, pero require que le pasemos una ref del formulario al constructor, por eso usamos la ref del form. También habría podido hacerse de esta forma usando javascript normal:

const form = document.getElementById("form");
const formData = new FormData(form);

Pero como es React, el useRef nos sirve más para el constructor del formData (no podemos usar getElementById porque, al ser React, en el momento en que el navegador lea estas líneas de código, aún no habrá agregado el form al DOM, por eso debemos usar useRef). Ese FormData entonces es una estructura clave-valor tipo Map, la cual trae la función get(<key>) para obtener el “valor” de cualquiera de sus “llaves”. Por eso las líneas 22, 23 y 24 usan formData.get(<key>).

Espero que se entienda y sirva de algo.

Me quedó de la siguiente manera:

Como pueden ver le agregué un botoncito para mostrar u ocultar la contraseña usando Hero Icons.
Primero hacen la importanción y el estado local

import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/solid';
...
const [showPassword, setShowPassword] = useState(false);
// Password Visibility
const togglePasswordVisibility = () => {
	setShowPassword(!showPassword);
};

Luego agregan la maquetación del botón a su estilo:

        <p>
          <span className='font-normal'>Password: </span>
          <span className='relative'>
            <input
              type={showPassword ? 'text' : 'password'}
              className='pr-10'
              value={parsedAccount?.password}
              readOnly
            />
            <button
              className='absolute right-0 top-1/2 transform -translate-y-1/2 bg-transparent border-none'
              onClick={togglePasswordVisibility}
            >
              {showPassword ? (
                <EyeSlashIcon
                  className='h-5 w-5 text-gray-400 hover:text-gray-600'
                  aria-hidden='true'
                />
              ) : (
                <EyeIcon
                  className='h-5 w-5 text-gray-400 hover:text-gray-600'
                  aria-hidden='true'
                />
              )}
            </button>
          </span>
        </p>
En mi opinión, ningún ecommerce debería requerir autenticación para que los usuarios puedan ver los productos, agregarlos al carrito o explorar libremente. La autenticación debería solicitarse solo en el momento del checkout, por razones evidentes. Voy a adaptar y utilizar este enfoque como guía para implementar una solución que considero más adecuada en términos de experiencia de usuario
Hola amigos a mi me costo mucho entender estos conceptos de OOP (programacion orientada a objectos por su siglas en ingles) voy a intentar explicarlo. Hay que entender 3 definiciones basicas: -Clase -Instancia -Metodos Las clases son usadas como herramientas para facilitarnos nuestro trabajo al programar y no tener que reescribir codigo y poder reusarlo, en una clase podemos tener muchas funciones y se llaman estas funciones atraves de **metodos**, entonces **JavaScript tiene sus propias clases internas nativas**(no tienen nada que ver con React) una de ellas es **FormData** (nombre de la clase). Asi como para una variable se tiene que inicializar con let, var, const etc..., una clase tambien debe ser inicializada con **new,** al "inicializar" se la llama **instancia** entonces al poner `const formData = new FormData(form.current)` esta haciendo una instancia con new de la clase FormData y esa clase necesita un parametro que seria form.current. Luego de hacer la **instancia** podemos utlizar los **metodos** que son funciones internas de las clases en este caso utiliza el **get** que es conocido para obtener los datos dentro del get hay strings 'name', 'password' y 'email', como sabe que esta informacion esta ahi? gracias a que el input tiene el **atributo name.** Es importante que esto que acabo escribir es de JavaScript no de React
¡Hola a todos! 👋 Quiero compartirles que la API original del curso está rota, lo que puede dificultar completar los ejercicios. Para ayudarles, he creado una versión funcional del proyecto base con una nueva API y código actualizado. 🚀 Pueden clonar este repositorio para seguir el curso sin problemas: 👉 <<https://github.com/darubiomunoz/prueba-tecnica-reactjs>> Además, si les resulta útil, no olviden darle una estrella ⭐ al repositorio y seguirme en GitHub. ¡Espero que les sea de ayuda y puedan completar el curso con éxito! 💚 ¡Happy coding! 💻
![](https://static.platzi.com/media/user_upload/image-2433358f-d400-48be-92e1-07b80b1d8dce.jpg)
Yo lo que hice fue crear los estados y las funciones en el context (la peculiaridad es que el estado de login se lo añadí al mismo user en vez de crear otra key en el localStorage con valores de true o false dependiendo el caso ) y utilice Link para la navegación por que no sabia de la existencia de Navigate, me hubiera facilitado un dolor de cabeza jajaja Creo que mi código esta bien comentado como para no explayarme mas. 😁 ![](https://static.platzi.com/media/user_upload/image-ede85add-d336-4c6f-b3a3-bbe47f69ef8e.jpg)Y mi SignIn ![](https://static.platzi.com/media/user_upload/image-2b92632e-2fba-4be7-b172-498473f6e64e.jpg)![](https://static.platzi.com/media/user_upload/image-f6a3946d-d663-4ba1-9510-df0aa07bb210.jpg)

Asi va quedando

Hola, les recomiendo tomarse un momento para leer la documentación y comprender mejor
https://react.dev/learn/referencing-values-with-refs#refs-and-the-dom
Está muy buena, vale la pena leerla