Hablemos de "State management" y porqué es "complejo".

¿Que es el estado de una App?

En una versión muy simple estado son datos que cambian en el tiempo y que usamos para definir que se muestra o no al usuario.

Pero: ¿de donde vienen esos datos?
Esta pregunta es quiza la "piedra angular" para un modelo mental sobre el manejo de estado.
No todo el estado es igual ni proviene de las mismas fuentes.
Podemos definir a lo menos 2 categorías de estado
- UI state
- Server State
(shouts @tannerlinsley for this idea)
UI State: el estado que representa aspectos de la interfaz exclusivamente y que es modificado por acciones del usuario por ejemplo ejemplo un modal abierto/cerrado, el valor de un input o un menú.
Es un estado de fácil acceso, efímero y sincrono y es "simple" de manejar
Server state: Es ese estado que "no los pertenece", que es solicitado a un lugar externo, es asíncrono, por lo general no es global y puede estar "desactualizado" como una Cache
"uno de los dos problemas más difíciles en Ciencias de la Computación " 😅
¿Por que diferenciar estos estados?
Por que se manjena de manera diferente.
El estado del servidor es complejo, esta idle, loading/fetching, success or failed, puedes hacer re-fetch o trabajar con datos desactualizados etc.
UI state es simple.
Para manejar el estado de la UI nada mejor que el framework por si mismo. En el caso de @reactjs este ya ofrece las herramientas necesarias para su manejo. De hecho React es un manejador de estado : Composición, Prop drilling y Context son formas de lidiar con el estado de la UI
Server state implica manejar muchas más "variables" externas.
Una recomendación general es hacer "co-locación" del estado e ir subiendo el estado "State lifting" cuando es necesario.
Puedes escribir el código para obtener el estado del servidor y manejarlo adecuadamente?
Claro que puedes!!! 💪🏻💪🏻💪🏻 pero ¿debes?
Creo que no. Tu tarea es implementar la lógica de negocio de tu app particular no manejar todo el boilerplate para manejar todos los casos de uso de obtener estado externo. Pero: y si quieres hacerlo?
En caso de q quieras hacerlo React provee de las herramientas necesarias.
El uso de hooks es todo lo que necesitas. Composición para crear tus propios hooks serán tu herramienta principal.
useState, useReducer y useEffect
matiashernandez.dev/react-useeffec…
Pero creo que es mejor dejar esta tarea a una librería que se encargue de buena manera como React-query react-query.tanstack.com/overview que entregará todo lo necesario para lidiar con el estado del servidor
Lo que nos deja nuevamente manejando el estado de la UI que puede derivar del estado obtenido del servidor o crearse con eventos.
Como manejarlo? Puedes usar cualquier librería como Redux...aunque no lo necesitas
matiashernandez.dev/no-necesitas-r…
Quieres saber más sobre utilizar hooks y crear usos y composición "avanzada" mira este curso en @eggheadio egghead.io/courses/hooks-…
También puedes unirte a MicroBytes el newsletter de microcursos al que prontamente se agregará un curso de fundamentos de React
microbytes.matiashernandez.dev
Y tu como manejas el estado de tus aplicaciones?

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Matías Hernández Arellano

Matías Hernández Arellano Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @matiasfha

18 Apr
¿Por que el desarrollo web se ha vuelto tan complejo?
En mi opinión tiene que ver con principalmente dos razones:
1. Los requerimientos han crecido y las expectativas de los usuarios y clientes han aumentado respecto a que es y no posible "en la plataforma"
...
2. La web (como la ideó Sir @timberners_lee) no fue ni está "arquitecturada" (palabra inventada) para lo que la estamos usando hoy.

La web fue ideada e implementada como una plataforma para compartir documentos de hiper texto. "Documentos" (subrayo ésto) que se enlazan con otros
He ahí que el lenguaje principal de la web sea HTML. Javascript vino a ser un parche sobre los motores de los browsers para darle algo de interactividad y dinamismo a esos documentos
Read 19 tweets
18 Feb
Q me disculpe @Pa__tty pero usar la vulnerabilidad de NNA como argumento para la presencialidad en clases de colegio es incongruente.
1ero que edades? Acaso todos los estudiantes podrán llevar a cabo los protocolos de autocuidado?
2do hablan de la vulnerabilidad de estudiantes...
Si hablamos de estudiantes vulnerables lo más seguramente también serán establecimientos de escasos recursos por lo que es muy difícil asegurar protocolos de seguridad (en cuanto a insumos).
Vulnerabilidad, si es económica entonces hablamos de uso de transporte público, es decir, espacios aglomerados y sabemos que los menores no serán vacunados, ergo, exposición a posibles contagios ya que aun no se alcanza inmunidad de grupo.
Read 6 tweets
17 Feb
He leído varias veces este tipo de preguntas.
¿Se puede usar React con....? O ¿Cómo usar React con X...? Siendo X alguna tecnología para desarrollo de APIS como Rails, Django, PHP/Laravel,.Net y en general la respuesta es la misma.
2 opciones posibles (no sólo para React) 🧵
La primera opciones es simple. Crea una api Rest o un endpoint graphql y listo.
React (y otros frameworks) pueden funcionar "solos" (una SPA). Es decir se distribuye un grupo de archivos estáticos que son servidos en algún CDN y se comunican con el servidor mediante alguna API.
Esto quiere decir que React (y los demás) son agnósticos de la tecnología de servidor usada ya que el medio de comunicación son solo llamadas HTTP (POST, GET, etc) que transmiten json.
Read 6 tweets
11 Feb
¿Clases o funciones al escribir tus componentes en #React?
Esta es una pregunta bastante común entre quienes están comenzando o retomando el desarrollo web con React.
¿Cuál es el approach correcto o el mejor?

¿Que prefieres tu y por que?
Sigue un hilo 🧵
Hoy el uso de componentes funcionales es la forma "aconsejada" o preferida de escribir tus componentes, pero las clases aún siguen ahí y no se irán por un buen tiempo. Incluso hay muchas app en producción que aún usan componentes de clase ya q fueron escritas hace un tiempo...
¿Entonces como decidir que usar o que aprender?
Como siempre la respuesta depende.
Depende de tus objetivos y el ambiente en que desarrollarás.
Si estás comenzando deberías comenzar por aprender la forma "moderna" de escribir componentes, es decir usando funciones..
Read 10 tweets
11 Feb
Hoy se celebra el día internacional de la mujer y la niña en la ciencia.
Y como padres también tenemos una labor, acercar la ciencia a niñas y niños.
Les recomiendo estos libros que a mis hijos. Mía e Inti les encantan.
Papá ¿donde se enchufa el sol? De @aberron
También, obviamente literatura nacional.
¿Por qué los perros mueven la cola?
Y
¿Qué son los mocos?
Del divulgador nacional por ontonomasia @GaboTuitero
También, astronomía (por cierto el CATA de @uchile tendrá curso de astronomía para niñez este 15/02 cata.cl/noticia.php?id…) y un gran exponente de esto es el profesor Maza.
Somos polo de estrella.
Read 6 tweets
4 Nov 20
¿Cuál es la diferencia entre los hooks useEffect y useLayoutEffect?

¿Cuándo usar useLayoutEffect?

Lo descubriremos en un nuevo hilo sobre #React #hooks 🧵
useLayoutEffect es similar en casi TODO a useEffect, solo tiene pequeñas diferencias.

TLDR: useEffect es lo que quieres usar el 99% del tiempo.

Ambos reciben dos argumentos, un callback que define el efecto y una lista de dependencias.

matiashernandez.dev/react-useeffec…
La diferencia entre ambos radica en el momento en que el efecto definido en el callback es ejecutado.

useEffectes ASINCRONO. y ejecuta el efecto después que tu componente se renderiza asegurando así que tu efecto no bloquerá el proceso principal.
Read 13 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!