No tienes acceso a esta clase

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

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

17 Días
19 Hrs
18 Min
19 Seg

Code review: React Context y FormData

6/9
Recursos

Aportes 9

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>
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
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
![](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