EzequielVilla / e-commerce-m10

e-commerce-m10.vercel.app
0 stars 0 forks source link

Feedback #1

Open zapaiamarce opened 2 years ago

zapaiamarce commented 2 years ago

Eze, Ahi le pegué una mirada y fuí anotando cosas que vi, hay un temita con los hooks y states (ahora lo vas a ver en mis notas), salvo eso lo veo bien de estructura y funcionalmente.

A nivel UX:

A nivel código:

Te lo devuelvo más que nada para que puedas pegarle una limpieza de hooks y states.

Es algo más de arquitectura y los hooks son complejos en si, asi que no te preocupes que lleva tiempo acostumbrarse y dominar el concepto.

Abrazo!

EzequielVilla commented 2 years ago

Buenas Marce! Gracias por la review!

Si, tuve problemas respecto al localStorage y la "data" de showItem cuando hacia el buildeo, me tiraba error siempre y supuse que era por el tema de que localstorage no existe en server, y la data llegaba "undefined" al componente, entonces recorde que useEffect solo se ejecuta del lado del cliente, y cuando lo meti ahi funciono. Pero claro, el manejo de localStorage se volvio una locura y lo otro tampoco nunca me cerro por tener que usar estados para data que no cambiaba, pero ahi pude arreglar ambas situaciones.

Gracias de nuevo por la review, le hago unos retoques mas y lo mando otra vez!

zapaiamarce commented 2 years ago

@EzequielVilla claro, en realidad ahí en el único caso donde vas a tener ese problema es si usas una función que invoque a la API directamente, desde un getStaticProps o algo así que corra en el server. Eso lo podés resolver con algo así:

function getToken() {
  return typeof window == "undefined"
    ? null
    : localStorage.getItem("auth_token");
}

En los casos que utilices SWR no vas a tener ningún problema porque internamente usan useEffect

zapaiamarce commented 2 years ago

Muchísimo mejor! Te voy a pedir un par de ajustes más porque te va a servir para esto y para la vida :)

Anoté algunas cosas de unos componentes pero creo que hay que pegarle una mirada general para ver si hay más hooks/states de más.

 const onSubmitEmail = (data: any) => {
    setEmail(data.email);
    setUserEmail(data.email);
    // clean the input for the code.
    reset();
  };

No tenés ninguna seguridad que setUserEmail se ejecute después de setEmail (quizás lo termina ordenando raro y lo hace antes).

Mismo caso que lo del ejemplo de updateUserData() no necesitás usar useEffect y estos states para hacer todo eso, solo necesitás exportar funciones comunes que manden la data a la API. A lo sumo tenés un state interno para guardar el email antes de recibir el code y mandarlo. De nuevo, técnicamente no es incorrecto pero es tan complejo hacerlo asi que podes tener efectos indeseados por todos lados. CAda vez que haces un setState o un useEffect se dispara, React vuelve a recalcular el componente y todos los sub componentes a ver si algo cambio en consecuencia de ese useState o useEffect.

En resumen, hay un exceso de hooks y states, la mayoría de estos pueden ser funciones comunes que se disparan cuando un evento los llama (submit, click), los states dejalos solo para cuando no te queda otra. Los custom hooks tipo useUpdateProfile pensalos como "lógica reutilizable para componentes" no hace falta que dentro de este uses useState o useEffect para todo. Podés crear un custom hook que sea asi por ejemplo:

import { getToken } from "lib/api"
export function useLogin(){
  return {
    login: async (email,code) => {
      const token = await getToken(email, code)
      saveToken(token)
      // por las dudas devuelvo el token
      return token;
    }
  }
}

Que no usa state ni effect porque solo le pasa una función al componente, (eventualmente podría llegar a usar un state si tuviera data que ir acumulando o algo asi)

Una alternativa totalmente válida en este caso de ejemplo es que el componente use directamente getToken (o alguna función que te loguee) desde "lib/api"

Repito, el tema de los hooks/states es algo que lleva tiempo, no te preocupes, estamos hilando fino para que no te traiga problemas a futuro.

zapaiamarce commented 2 years ago

@EzequielVilla haceme los ajutes, avisame y aprobamos 🚀 🚀 🚀

EzequielVilla commented 2 years ago

Marceeee, gracias nuevamente por la review que hiciste! Esta ultima me sirve un poco mas todavia, estaba necesitando un empujon con el tema de los hooks porque no le estaba enganchando la vuelta (justo justo estoy leyendo articulos al respecto de como/por que/cuando usarlos), porque crei que eran como funciones auxiliares. Me estaba pasando que tantos useEffect o logica dentro de un componente estaba siendo un choclo o no se lograba entender, y meter useEffect en funciones no sirve, asi que implemente los custom hooks porque queda mas claro y expresado que hace cada cosa, aunque se ve que no lo estoy implementando del todo bien, pero todo esto me viene de 10. Voy a ir asimilando y metiendo mano en todo esto!