#useState

1 messages · Page 1 of 1 (latest)

pliant moth
#

llega una prop "user" al componente, y esta misma decide el estado inicial de un estado (formulario), cuando la prop cambia debe reiniciar el estado y setearlo con dicho cambio. como useState solo inicializa en el primer render, me toca halar del useEffect para setear el estado.

#

la prop tiene info de otro componente, pero el formulario sigue siendo el mismo. entonces no veo otra forma de hacer que el formulario REACTcione al cambio de la prop mas que con useEffect

#

pero me salta ese warnning de depencia que bueno, ya me está diciendo q estoy haciendo una guarrada y no tengo claro como debería manejarlo.

astral hollow
#

Como pintas el form de edit?

pliant moth
#

aaah entonces si lo hice bien, tengo conflictos es con el initialState xD

#

mi problema está en que que el userId inicia el estado xD tengo la misma cosa exepto las " "

#

logré solucionarlo con una función gg jajaja

#

@astral hollow gracias, la vd pensé q estaba haciendo macana... buna ahí con la docu thisisfine

astral hollow
#

vale, pero si ves que lo que ponen en la doc tiene un circulo rojo

#

significa que asi no se debe hacer

#

tal cual lo que tu estas haciendo con el useEffect

pliant moth
#

joda, entonces si es una guarrada xD.... ya lo cambio

#

me fui al padre y envié con la key .... y en efecto mejoró el render. se nota en las devtools

astral hollow
#

👍

pliant moth
#

aunq no es intuitivo la verdad...

astral hollow
#

Si, lastimosamente no hay forma sencilla de resolver esos casos, por eso de hecho a los de react les tocó crear esa doc

#

porque vieron que muchos resolviamos estas cosas con useEffect

pliant moth
#

al final un useEffect genera 1 render, en teoria la key crea otro componente. no entiendo como 1 cosa es mas rápida q la otra

astral hollow
#

el tema del useEffect es que se ejecuta despues de un render

#

entonces con use effect es ""

#

new User -> render
Ejecuta Efecto, que cambia estado y genera otro render

#

mientras la key es

#

cundo cambia user, cambia la key y se crea un componente de cero con estado limpio

#

y ya

pliant moth
#

por eso. ambas cosas deben tener el mismo rendimiento. xD

#

cambiar un nodo entero como puede ser mas rapido q modificar el mismo nodo

astral hollow
#

no es un tema de cambiar el nodo

pliant moth
#

de hecho modificarlo, debería ser mas sencillo q cambiarlo todo

astral hollow
#

el useEffect termina haciendo que se modifique dos veces

#

de todas formas recuerda que react maneja un dom virtual

pliant moth
#

por eso... igual si no pongo key, le toca render si o si. q es el primer render con el valor de la prop

astral hollow
#

si el resultado del dom virtual no cambia con respecto al dom real, este ultimo no se modifica

#

si no pones key, son dos renders

#

sin key es uno solo

pliant moth
#

en ambos casos toca hacer 2 cosas.

#

sin key 2 renders
con key 1 render y 1 cambio de nodo

astral hollow
#

el nodo realmente no cambia, porque el resultado en html es el mismo

#

cambia solo el nodo virtual, pero no el del navegador real

#

y eso es super rapido

pliant moth
#

mmm bueno si no lo manda al real como sabrá q es otro userId ?

astral hollow
#

son dos cosas

#

la key no es para los nodos html

#

la key es para los estados de react

pliant moth
#

si cambia la props debe mostrar 2 htmls diferentes, por entede debe o render o cambiar el nodo entero

astral hollow
#

pero la key no es una prop que afecta el html final

#

es una prop especial de react para tener conocimiento de los estados de los componentes

pliant moth
#

entiendo, pero si cambia la prop, cambia el estado, si cambia el estado cambia el html

#

no ?

astral hollow
#

si el estado se pinta o afecta el contenido html, si

#

que en tu caso del form de edit, es asi

pliant moth
#

es q la prop decide la vista, principal motivo por el que tocaba halar de useEffect

#

bueno === xD ya está. la vd no logro entenderlo, entiendo, pero a la vez no e.e

astral hollow
#

si correcto, pero debes verlo desde 2 frentes

#

una cosa es el resultado en html y si eso cambia, se actualizan los nodos del documento en el navegador

#

y otra cosa es la ejecucion de un render de react, que puede o no, involucrar actualizaciones de los nodos html

#

con el useEffect tienes si o si, dos renders

#

con el key, es solo un render

#

los dos hacen un solo cambio de nodos, es decir, una sola vez

#

pero el useEffect hace que el componente se renderize 2 veces

#

esa sería la diferencia