From Redux to Zustand to Jotai to Zustand to Custom: Nuestra Historia de Horror de Gestión de Estado

Rate this content
Bookmark

Nuestra búsqueda para hacer que nuestro producto sea más rápido y más eficiente nos obligó a reevaluar nuestra solución de gestión de estado. Desafortunadamente, más de una vez: en el transcurso de dos años migramos de Redux a Zustand a Jotai, luego de vuelta a Zustand (esta vez con algunos trucos elegantes) y finalmente a una solución personalizada.
¿Deberías hacer lo mismo para averiguar qué biblioteca se adapta mejor a tu caso de uso? ¿Es realmente necesaria una solución personalizada? Probablemente no, y para evitar que cometas los mismos errores que nosotros, quiero contarte lo que realmente importa, así como algunas cosas importantes que aprendimos durante este doloroso viaje.

This talk has been presented at React Day Berlin 2024, check out the latest edition of this React Conference.

Giulio Zausa
Giulio Zausa
29 min
13 Dec, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy es sobre Plux, una aplicación TypeScript construida con React y Three.js. El orador discute los desafíos que enfrentaron con la gestión de estado y su viaje de cambiar de bibliotecas varias veces. Comenzaron con Redux pero luego introdujeron GSDAN, una biblioteca de gestión de estado más rápida y fácil de mantener. Optimizaron el rendimiento usando selectores, pero se dieron cuenta de que se convirtió en un problema al tratar con documentos con muchos nodos. Reemplazaron Zustand con Jotite para un mejor rendimiento, pero encontraron limitaciones y finalmente implementaron una tienda personalizada, lo que resultó en una mejora significativa. El orador enfatiza la importancia de no encerrarse en una solución y comparte su cronograma para los cambios. También mencionan consideraciones para la gestión de estado, reconocer problemas de rendimiento y la posibilidad de abrir su solución al público.

1. Introduction to Plux and State Management

Short description:

Hoy, quiero contarles sobre cómo hicimos una especie de historia de terror que llamamos nosotros mismos y sobre cómo cambiamos nuestra infraestructura de gestión de estado demasiadas veces. Estamos hablando de este producto llamado Plux, una aplicación de TypeScript construida con React, Three.js y React 3.0 Fiber. Y una pregunta que he escuchado algunas veces es, está bien, React, pero ¿cómo manejas el estado? Y mi respuesta a eso es de una manera meme, sí. Estamos usando un montón de diferentes bibliotecas y las cambiamos bastantes veces.

Hoy, quiero contarles sobre cómo hicimos una especie de historia de terror que llamamos nosotros mismos y sobre cómo cambiamos nuestra infraestructura de gestión de estado demasiadas veces. Así que vamos directo al grano.

¿De qué estamos hablando? Estamos hablando de este producto en el que estoy trabajando llamado Plux. Y es un software CAD, CAD eléctrico muy agradable para la web. Básicamente, puedes diseñar circuitos, diseñar electrónica, los esquemas, el PCB. Es como si hubiera mucho en juego y puedes crear conexiones y simular circuitos. Es genial.

¿Y por qué estamos hablando de esto aquí hoy? Bueno, porque está construido sobre tecnologías que supongo que muchos de ustedes conocen. Es una aplicación de TypeScript. Tenemos como medio millón de líneas de código de TypeScript y está construida con React, tanto la parte de la interfaz de usuario como la parte del lienzo 3D. Está construida con Three.js y React 3.0 Fiber. Así que en realidad estamos construyendo una herramienta CAD gigante sobre React 3.0 Fiber. Y una pregunta que he escuchado algunas veces de personas con las que hablo es, está bien, React, pero ¿cómo manejas el estado? ¿Estás usando dos ganchos estándar de Redux? ¿Qué estás usando? Y mi respuesta a eso es de una manera meme, sí. Estamos usando un montón de diferentes bibliotecas y las cambiamos bastantes veces.

2. Switching Libraries and Introduction to Redux

Short description:

Cambiamos de bibliotecas demasiadas veces debido a los desafíos de soportar documentos enormes, interacción en tiempo real y reglas de cascada complejas. Nuestro objetivo era ejecutarlo a 60 fotogramas por segundo en hardware medio. Comenzamos con Redux como nuestro repositorio para datos persistentes, permitiendo multijugador automático y sincronización con el backend.

¿Y por qué cambiamos de bibliotecas demasiadas veces? Bueno, fue un proceso de descubrimiento. Y esto se debe a que nuestro producto es bastante desafiante. Queremos soportar documentos enormes, que como 10,000 partes electrónicas, cada una es un modelo 3D con propiedades y cosas. Y queremos soportar interacción en tiempo real. Así que puedes hacer clic y arrastrar todo y el multijugador, como lo que haces con Figma y Google Docs, puedes simplemente editar algo y todos los demás lo verán. Y tenemos un sistema complejo de reglas de cascada, como cada componente electrónico tiene dependencias entre ellos. Y estamos ejecutando un montón de cálculos en segundo plano, como calcular propiedades eléctricas, calcular geometría, y todo eso se está ejecutando en WebWorkers. Y tenemos este tipo de canalización de datos, porque estamos procesando nuestros datos mucho antes de poder mostrarlos a los usuarios.

Y hay dependencias extrañas entre los datos y todos esos desafíos con el objetivo de poder ejecutarlo a 60 fotogramas por segundo en hardware medio, lo cual fue increíblemente difícil de hacer. Así que hablemos del comienzo. ¿Dónde comenzamos con esa gestión? Bueno, con Redux, por supuesto, amamos Redux. Todavía lo usamos hoy. Y la razón por la que usamos Redux es porque es nuestro repositorio para datos persistentes. Todo el documento que viene del servidor y luego regresa al servidor, se persiste en Redux, lo que nos permite hacer algo bastante genial. Tenemos multijugador automático y persistente y sincronización con el backend. Cada vez que realizamos una acción en Redux, todos los que, todas las demás personas que están visitando ese enlace podrán recibirlo en su extremo. Así que no tenemos que preocuparnos por eso, porque cada desarrollador puede simplemente enviar las acciones a Redux y se persistirá y transmitirá automáticamente. Y estamos haciendo eso con RxJS y Epix. Pero no quiero entrar demasiado en eso hoy, porque quiero contarles la historia de cómo lo cambiamos.

QnA

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Query: ¡Es hora de romper con tu "Estado Global"!
React Summit Remote Edition 2020React Summit Remote Edition 2020
30 min
React Query: ¡Es hora de romper con tu "Estado Global"!
Top Content
Global state management and the challenges of placing server state in global state are discussed. React Query is introduced as a solution for handling asynchronous server state. The Talk demonstrates the process of extracting logic into custom hooks and fixing issues with state and fetching logic. Optimistic updates with mutation are showcased, along with the benefits of using React Query for data fetching and mutations. The future of global state management is discussed, along with user feedback on React Query. The Talk concludes with an invitation to explore React Query for server state management.
Gestión del Estado de React: 10 Años de Lecciones Aprendidas
React Day Berlin 2023React Day Berlin 2023
16 min
Gestión del Estado de React: 10 Años de Lecciones Aprendidas
Top Content
This Talk focuses on effective React state management and lessons learned over the past 10 years. Key points include separating related state, utilizing UseReducer for protecting state and updating multiple pieces of state simultaneously, avoiding unnecessary state syncing with useEffect, using abstractions like React Query or SWR for fetching data, simplifying state management with custom hooks, and leveraging refs and third-party libraries for managing state. Additional resources and services are also provided for further learning and support.
Por qué deberías usar Redux en 2024
React Summit 2024React Summit 2024
33 min
Por qué deberías usar Redux en 2024
Top Content
Mark Erickson explains the history, creation, evolution, and benefits of Redux. Redux was designed to make state updates and action history maintenance easy, incorporating functional programming principles. Redux Toolkit was created to simplify Redux usage. Redux is still a valid choice for its consistent pattern and separation of state from UI. The decision to use Redux depends on the specific use case and the need for centralized state management.
Pensando en React Query
React Summit 2023React Summit 2023
22 min
Pensando en React Query
Top Content
React Query is not a data fetching library, but an Asian state manager. It helps keep data up to date and manage agent life cycles efficiently. React Query provides fine-grained subscriptions and allows for adjusting stale time to control data fetching behavior. Defining stale time and managing dependencies are important aspects of working with React Query. Using the URL as a state manager and Zustand for managing filters in React Query can be powerful.
Espera, ¿React es Multi-Hilo?
React Day Berlin 2022React Day Berlin 2022
22 min
Espera, ¿React es Multi-Hilo?
Top Content
This Talk explores the use of web workers in React to improve user experience and performance. It discusses the limitations of JavaScript rendering and how web workers can offload tasks to separate threads. The Talk also highlights the benefits of using concurrent mode in React and introduces the UseWebWorkerHook library for simplifying the creation of web workers. It emphasizes the considerations when using web workers and concludes with a mention of Postman's hiring and new feature release.

Workshops on related topic

Repensando el Estado del Servidor con React Query
React Summit 2020React Summit 2020
96 min
Repensando el Estado del Servidor con React Query
Top Content
Featured Workshop
Tanner Linsley
Tanner Linsley
La distinción entre el estado del servidor y el estado del cliente en nuestras aplicaciones puede ser un concepto nuevo para algunos, pero es muy importante entenderlo cuando se entrega una experiencia de usuario de primera calidad. El estado del servidor viene con problemas únicos que a menudo se cuelan en nuestras aplicaciones sorpresa como:
- Compartir datos entre aplicaciones- Caché y Persistencia- Deduplicación de Solicitudes- Actualizaciones en segundo plano- Gestión de Datos "Obsoletos"- Paginación y Recuperación Incremental- Memoria y Recolección de Basura- Actualizaciones Optimistas
Los gestores tradicionales de "Estado Global" pretenden que estos desafíos no existen y esto finalmente resulta en que los desarrolladores construyan sus propios intentos sobre la marcha para mitigarlos.
En esta masterclass, construiremos una aplicación que expone estos problemas, nos permite entenderlos mejor, y finalmente los convierte de desafíos a características usando una biblioteca diseñada para gestionar el estado del servidor llamada React Query.
Al final de la masterclass, tendrás una mejor comprensión del estado del servidor, el estado del cliente, la sincronización de datos asíncronos (un bocado, lo sé), y React Query.
Crea un sitio web editable visualmente con Next.js utilizando React Bricks, con blog y comercio electrónico
React Summit 2023React Summit 2023
139 min
Crea un sitio web editable visualmente con Next.js utilizando React Bricks, con blog y comercio electrónico
Top Content
WorkshopFree
Matteo Frana
Matteo Frana
- React Bricks: por qué lo construimos, qué es y cómo funciona- Crea una cuenta gratuita- Crea un nuevo proyecto con Next.js y Tailwind- Explora la estructura del directorio- Anatomía de un Brick- Crea un nuevo Brick (Texto-Imagen)- Añade un título y descripción con edición visual RichText- Añade una imagen con edición visual- Añade controles de barra lateral para editar props (relleno y lado de la imagen)- Anidación de Bricks utilizando el componente Repeater- Crea un brick de galería de imágenes- Publica en Netlify o Vercel- Tipos de página y campos personalizados- Acceso a los valores meta de la página- Internacionalización- Cómo reutilizar contenido en varias páginas: Historias y incrustaciones- Cómo crear un comercio electrónico con datos de productos de una base de datos externa y páginas de aterrizaje creadas visualmente en React Bricks- Características empresariales avanzadas: permisos flexibles, estructura bloqueada, componentes visuales personalizados