Hola a todos. Mi nombre es Tanner Linsley, y soy cofundador y vicepresidente de UI y UX en nozzle.io, donde construimos software de seguimiento de rango SEO para enterprise. Me encanta absolutamente React y JavaScript, y tengo un poco de obsesión por construir software de código abierto también.
Así que desde que aprendí React, he estado súper obsesionado con temas como la generación de sitios estáticos, data visualization, y animation. Pero hoy me gustaría hablarles sobre lo que posiblemente es mi favorito de todos, la gestión del estado global.
Hoy en día, una tonelada de code en nuestras aplicaciones está dedicada a consumir y manipular datos asíncronos. Ya sea que esos datos provengan de nuestros usuarios o servidores o APIs de terceros, es absolutamente crítico para nuestras aplicaciones proporcionar valor a nuestros usuarios. De hecho, para muchos de nosotros, nuestras aplicaciones son simplemente interfaces de usuario con opiniones para consumir y gestionar estos datos.
A lo largo de los años, he notado que los patrones alrededor del acceso y manipulación de nuestros datos en nuestras aplicaciones han tomado rápidamente residencia con lo que todos conocemos como estado global. El estado global es súper conveniente. Nos ayuda a evitar la perforación de propiedades, y nos permite acceder a los datos a través de nuestra aplicación sin copiarlos o duplicarlos. E incluso nos ayuda a comunicarnos entre componentes y hooks aislados que de otra manera no podrían hacerlo. Al final, simplemente nos ayuda a hacer más con menos code. Es extremadamente accesible y poderoso, por lo que es natural que querríamos que todos nuestros importantes datos del lado del servidor fueran tan accesibles como nuestro estado global. Y con esa expectativa, no es sorprendente que nosotros, como desarrolladores de React, hayamos elegido co-ubicar nuestros datos del lado del servidor con el resto de nuestro estado global.
Es relativamente fácil hacer esto usando algo como el estado del componente local con el contexto de React, o incluso usando cualquiera de las numerosas bibliotecas de la siempre creciente lista de herramientas de gestión del estado global. Pero al final, la expectativa suele ser la misma. Esperamos que nuestro estado global no sólo sea capaz de manejar cosas triviales como el estado del menú, temas, cosas como toasts y alertas, sino que también esperamos que sea responsable de los ciclos de vida complejos alrededor de la obtención y provisión de nuestros datos del lado del servidor y asíncronos a nuestros usuarios.
Así que hoy, estoy aquí para decirles que a pesar de la conveniencia efímera que nos da el estado global al trabajar con datos del lado del servidor, creo que hemos cometido un gran error al colocarlo allí. Nos hemos engañado a nosotros mismos y a nuestro code pensando que todo el estado es creado igual, cuando creo que nuestros datos asíncronos y el estado global no podrían ser más diferentes, especialmente cuando se trata de dónde se almacenan, la velocidad a la que los accedemos, y cómo los accedemos y actualizamos, y finalmente quién puede hacer cambios en ellos.
Para hacer todo esto más fácil de entender, quiero dejar de usar el término estado global y en su lugar llamar a estos dos tipos diferentes de estado estado del cliente y estado del servidor. El estado del cliente es relativamente simple y debería ser familiar para la mayoría de los desarrolladores. Es temporal y local, y generalmente no se persiste entre sesiones. Se accede a él con APIs sincrónicas que no tienen latencia, y la mayoría de él es propiedad de la instancia de nuestra aplicación cliente. Así que por todas esas razones, podemos confiar bastante en que nuestro estado del cliente siempre estará al día en cualquier momento en nuestra aplicación.
Sin embargo, el estado del servidor es bastante diferente. El estado del servidor se persiste de forma remota, por lo que la fuente de la verdad de nuestro estado del servidor es potencialmente desconocida, o al menos fuera de nuestro control. Es asíncrono, por lo que tenemos que acceder a él con APIs asíncronas, y también tiene una propiedad compartida implícita, lo que significa que no sólo es propiedad de nuestro cliente. Puede ser leído y manipulado tanto por el servidor como por cualquier otro cliente potencial que interactúe con él. Debido a todas estas cosas, se pueden hacer muy pocas garantías sobre nuestro estado del servidor siempre estando al día en nuestras aplicaciones, y en su lugar generalmente terminamos confiando en simples instantáneas de nuestros datos asíncronos.
Comments