No tienes acceso a esta clase

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

Code review: Vistas Dinámicas para el SignIn

5/9
Recursos

¿Cómo gestionamos la cuenta del usuario para cambiar de vista?

Para desarrollar una aplicación intuitiva, es fundamental gestionar eficazmente la cuenta del usuario, mostrando distintas vistas según sus acciones. En esta sección, vamos a ver cómo cambiar la visualización entre vistas basándonos en el estado del usuario, utilizando un enfoque reactivo y dinámico en el desarrollo.

¿Qué es una vista oculta y cómo la usamos?

Una vista oculta es una parte del diseño de la aplicación que solo se muestra al usuario en determinados escenarios. Por ejemplo, en el proceso de inicio de sesión, es crucial cambiar entre la vista principal y la vista de cuenta de usuario. Esto se logra definiendo un estado local que guarda cuál es la vista activa, lo que nos permite alternar entre vistas al presionar botones como "Sign In" o "Sign Up". Este enfoque dinámico mejora la experiencia del usuario al mostrarle solo la información relevante en cada momento.

¿Cómo leemos y utilizamos la información de cuenta?

Para decidir cuál vista mostrar, necesitamos verificar si el usuario tiene una cuenta existente. Este proceso implica leer datos del local storage y del estado de React. Esta funcionalidad comienza con una revisión de los pull requests más recientes en el repositorio. Al analizar estos cambios, podemos entender cómo agregar funcionalidades que determinen la presencia de una cuenta y cómo deshabilitar o habilitar botones según el estado de la cuenta.

¿Qué cambios realizamos en las vistas y elementos?

Para implementar un sistema que reaccione dinámicamente a la información del usuario, ajustamos las vistas con datos reales. Eliminamos valores estáticos y en su lugar, utilizamos datos almacenados, como el correo electrónico o contraseña del usuario, en los campos correspondientes. Adicionalmente, implementamos la lógica condicional para habilitar o deshabilitar botones. Así, el botón de "Sign Up" solo se habilita si el usuario no tiene una cuenta, mientras que los botones de "Sign In" se activan si hay una cuenta existente.

¿Cómo trabajamos con el estado local para cambiar vistas?

El uso del estado local es crucial para que nuestra aplicación responda adecuadamente a las interacciones del usuario. Veamos cómo creamos y utilizamos un estado local para alternar entre diferentes vistas.

¿Cómo creamos un estado local para alternar vistas?

El primer paso es importar useState de React y definir un estado local. Este estado, que podemos llamar view, nos ayudará a determinar qué vista mostrar. Dependiendo de su valor, renderizamos el contenido apropiado. En el siguiente bloque de código se describe cómo implementarlo:

import React, { useState } from 'react';

function MyApp() {
  const [view, setView] = useState('signIn');

  return (
    <div>
      {view === 'signIn' ? (
        <SignInComponent />
      ) : (
        <CreateUserComponent />
      )}
      <button onClick={() => setView('createUser')}>Sign Up</button>
    </div>
  );
}

¿Cómo funciona el renderizado condicional?

Utilizamos el renderizado condicional para decidir qué componente exhibir según el estado local. Si el valor es signIn, mostramos el componente asociado a esa vista. De lo contrario, mostramos la vista de creación de usuario. Esta lógica se completa con un evento en el botón de "Sign Up" que cambia el estado a createUser, lo que automáticamente cambia la vista.

¿Cómo monitorear los cambios en el navegador?

Puedes realizar una verificación empírica de estos cambios al ejecutar la aplicación en un navegador. Allí verás que ciertos botones están deshabilitados si el usuario no tiene una cuenta, y cómo al cambiar el estado esos botones se habilitan o deshabilitan según corresponda. Este tipo de pruebas en tiempo real en un navegador son esenciales para garantizar una experiencia de usuario fluida y coherente.

¿Cómo guardamos la información del formulario y del usuario?

Un paso crucial posterior al cambio de vistas es el manejo de datos del formulario completado por el usuario. Estos datos no solo se deben procesar en la aplicación, sino también almacenarse para futuras referencias.

¿Cómo completamos y gestionamos la nueva vista de usuario?

Cuando el usuario decide crear una nueva cuenta, la vista que permite introducir sus datos debe llenarse de manera adecuada. Allí, se le presenta un formulario que debe ser diligenciado para completar el proceso de registro.

¿Qué hacer con los datos finales del formulario?

Una vez el formulario es llenado, debemos persistir los datos tanto en el estado como en el local storage para su posterior consulta y continuidad del servicio ofrecido por la aplicación. Esto asegura que, si el usuario cierra la aplicación, la información no se pierde, marcando un paso más hacia la eficiencia en la gestión de datos y experiencia consistente.

¡Continúa desarrollando tus habilidades y explorando nuevas técnicas para mejorar tus aplicaciones!

Aportes 5

Preguntas 2

Ordenar por:

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

Por comodidad y escalabilidad es mejor separar y crear un servicio (pequeña librería) que interactúe con el LocalStorage. Algo asi:

De esta manera es más simple llamar cualquier cosa del storage, por ejemplo:

Tan solo se importa donde se necesite y de esta manera no tienes que hacer JSON.parse o JSON.stringify en todo lado, aparte que esa lógica queda encapsulada en 1 solo lado, por ende si se necesita cambiar algo. El cambio es en 1 solo lado:

También se puede renderizar de la siguiente manera:

{
	condición
		? render1
		: render2 
} 

.
Si se cumple la condición se ejecuta el render1 y sino el render2.
.
Por ejemplo:

return (
    <Layout>
      <h1 className="font-medium text-xl text-center mb-6 w-80">Welcome!</h1>
      {view === "create-user-info" ? (
        <div>Crear usuario</div>
      ) : (
        <div className="flex flex-col w-80">
          <p>
            <span className="font-ligth text-sm">Email: </span>
            <span>{parsedAccount?.email}</span>
          </p>
          <p>
            <span className="font-light text-sm">Password: </span>
            <span>{parsedAccount?.password}</span>
          </p>
          <Link to="/">
            <button
              className="bg-black disabled:bg-black/40 text-white w-full rounded-lg py-3 mt-4 mb-2"
              disabled={!hasUserAnAccount}
            >
              Log In
            </button>
          </Link>
          <div className="text-center">
            <a
              className="font-light text-xs underline underline-offset-4"
              href="/"
            >
              Forgot my password
            </a>
          </div>
          <button
            onClick={() => setView("create-user-info")}
            className="border border-black disabled:text-black/40 disabled:border-black/40 rounded-lg mt-6 py-3"
            disabled={hasUserAnAccount}
          >
            Sign Up
          </button>
        </div>
      )}
    </Layout>
  );
¡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! 💻
## 🦄✨ Para el primer issue, decidí desarrollar todos los features de las 2 vistas que se mencionan y de MyAccount. El orden en que lo hice fue: * Log In con datos quemados, validando existencia de usuario y match con su password. * Sign Up para almacenar nuevos usuarios validando que todos los campos estén completos y que el email ingresado no exista en el registro de usuarios. * Update de datos en My Account para actualizar correo contraseña o ambos, validando antes que se ingrese la actual contraseña y que el nuevo correo no exista en los registros de los usuarios. * Delete de cuenta. Esta feature elimina el registro del usuario logueado y lo redirige al login. Para esta implementé un Modal que confirma la decisión del usuario de liminar su cuenta. Para la implementación de todos estos features implementé un componente de Alertas que muestran el estado de la operación, si se realizó con éxito, si existe algún incumplimiento en alguna de las validaciones mencionadas. Estas son algunas de las maneras en que se visualizan las vistas: ![](https://static.platzi.com/media/user_upload/image-256dc8bf-e3ac-485b-a053-ff58a2686c02.jpg) ![](https://static.platzi.com/media/user_upload/image-852bf6be-5220-497f-a848-3d7c8a38727f.jpg) ![](https://static.platzi.com/media/user_upload/image-675b4956-0ee5-4e9d-a9ac-70316a38cf93.jpg) ![](https://static.platzi.com/media/user_upload/image-345e30da-a66a-4257-a6ae-aae0a06e92fd.jpg) Para ver el código pueden revisar mi repo:3 [CrisAcalo/CriStore (github.com)](https://github.com/CrisAcalo/CriStore)
He logrado casi el 80% de la prueba por mi cuenta, el problema con el que me he estancado es hacer Log In a primeras. No he podido lograr la condición de redireccion a Home luego de verificar la cuenta.