Rompiendo el Código Detrás de la Colaboración en Tiempo Real con Websockets

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

Figma, Google Docs, Miro, y varias otras herramientas te permiten ver en tiempo real lo que una persona está haciendo, pero ¿cómo? En esta charla, conocerás el concepto de event-brokers, el patrón de diseño pubsub, y web sockets. Desentrañaremos estas características y entenderemos cómo hacerlas.

This talk has been presented at JSNation US 2024, check out the latest edition of this JavaScript Conference.

Vitor Norton
Vitor Norton
20 min
21 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hola, soy Vitor Norton, un defensor de desarrolladores en SuperViz. Me apasiona conectar a las personas, dependo mucho de mis herramientas de productividad y me encanta la idea de trabajar en cualquier parte del mundo. Trabajar de forma remota es una prioridad, pero tampoco queremos sentirnos solos. Vamos a explorar algunos ejemplos de empresas que han abordado este problema: Gather Town, Miro, y Microsoft Teams. Los componentes colaborativos permiten la colaboración en tiempo real al sincronizar las acciones de los participantes. El componente de punteros del ratón utiliza un concepto de sala para sincronizar las posiciones del ratón. Se utilizan canales y WebSockets para la sincronización de datos en tiempo real. CR-DTS es un tipo de datos relacionado sin conflictos utilizado para manejar conflictos de contador en entornos colaborativos.

1. Introduction to Collaborative Components

Short description:

Hola, soy Vitor Norton, un defensor de desarrolladores en SuperViz. Me apasiona conectar a las personas, dependo mucho de mis herramientas de productividad y me encanta la idea de trabajar en cualquier parte del mundo. Trabajar de forma remota es una prioridad, pero tampoco queremos sentirnos solos. Vamos a explorar algunos ejemplos de empresas que han abordado este problema: Gather Town, Miro y Microsoft Teams.

Hola, estoy aquí para hablarles sobre el código detrás de los componentes colaborativos. Soy Vitor Norton. Soy brasileño. Soy 10 veces Microsoft MVP. También soy un defensor de desarrolladores aquí en SuperViz. Pero eso no dice mucho sobre mí. Prefiero decir que soy apasionado por conectar a las personas, que dependo mucho de mis herramientas de productividad, y me encanta la idea de trabajar en cualquier parte del mundo.

Así que trabajar de forma remota para mí es mi máxima prioridad. Y esto me hace estar cada vez más conectado con mis dispositivos. Y de hecho, creo que no soy solo yo. Estamos cada vez más conectados a través de nuestros dispositivos, ¿verdad? Y todos tenemos algunos objetivos. Como, no queremos más reuniones. Queremos trabajar de forma remota. Pero tampoco queremos mostrarnos solos. ¿Y cómo logramos eso? ¿Cómo resolvemos eso?

Déjame preguntar a JPT un poco para ver qué empresas han hecho esto y han resuelto este problema. Uno de los mejores ejemplos que puedo traer es Gather Town. Es una suite colaborativa en la que casi puedes jugar un juego, ¿verdad? Tienes este escritorio donde está todo tu equipo, y puedes ir al escritorio y hablar con la gente. Pero traen este modo interactivo de juego al lugar de trabajo. Y esto nos hace sentir menos solos y aún así un poco libres para llegar a otras personas que vemos que, oh, están en el escritorio, déjame hablar con ellos. Otra empresa que ha hecho esto es Miro. Que ha añadido... Estoy seguro de que has visto esto en otros productos como Figma, que puedes ver los punteros del ratón, puedes ver comentarios. Si alguien hace algo aquí, lo verás en la otra pantalla, puedes ver quién está en línea. Todos estos componentes. También tenemos aplicaciones de chat. Y seamos honestos, todos usamos mucho. También tenemos otro ejemplo es Microsoft Teams donde puedes ver qué presentaciones están usando las personas. Y si lo aceptan, si están en línea, fuera de línea, puedes ver todo de un vistazo antes de comenzar una reunión, ¿verdad? Así te sientes menos solo en esa reunión. Ves quién va a estar allí, quién ya está allí. Otro es Uber.

2. Understanding Collaborative Components

Short description:

Los componentes de colaboración colaborativa, como los elementos de formulario, los componentes de 'quién está en línea', la sincronización del puntero del ratón y los comentarios contextuales, permiten la colaboración en tiempo real. Centrémonos en el componente de punteros del ratón, que utiliza un concepto de sala para sincronizar las posiciones del ratón de los participantes. Al rastrear y actualizar posiciones con estado y un canal, se logra una sincronización fluida.

O si tienes, al menos en Brasil, tenemos esta gran aplicación que puedes ver a un repartidor trayendo cosas a tu puerta. En Uber, puedes ver el coche conduciendo y ves esta actualización en tiempo real ocurriendo. Así que todo esto es lo que llamamos componentes de colaboración colaborativa. Y desglosémoslo un poco más.

Veamos algunos ejemplos de estos componentes colaborativos. Tenemos elementos de formulario que permiten ver a dos personas en la misma página. Una persona está escribiendo en una computadora y la otra persona está viendo en la otra computadora que Anna está escribiendo. Tienes este componente de quién está en línea que te permite ver si alguien ha mirado el documento que adjuntaste en el correo electrónico o algo así. Y puedes ver para hacer el trabajo que se supone que debes hacer. También tienes el puntero del ratón, porque, y creo que esto es bastante asombroso porque al menos en mi trabajo, creo que todos son como, Oh, presiona este botón en esta posición.

Y si tienes la sincronización de punteros del ratón en este entorno, entonces puedes simplemente decir, Oh, este botón presiona este botón. Y comentarios contextuales que puedes añadir comentarios en cualquier lugar, en cualquier parte de la página y hacer este trabajo realmente sincrónico. Pero desglosémos uno de estos componentes. Desglosémos los punteros del ratón y veamos qué lo hace funcionar. Oh, hice algunas diapositivas aquí.

Bien. Así que el código detrás de esto, tenemos un componente de React, punteros del ratón, y un elemento div al que le doy un ID, y envío este ID al componente de React. Bien, veamos la definición de este componente, ¿verdad? Así que aquí está, es bastante simple, bastante directo.

3. Understanding Mouse Pointers and Channels

Short description:

Una sala es un lugar donde los participantes están sincronizados y colaboran. El componente de punteros del ratón tiene tres funcionalidades principales: rastrear las posiciones del ratón de otros participantes, actualizar la propia posición del usuario y asegurar una sincronización fluida. El componente utiliza estado y un canal para lograr estas funcionalidades. El canal permite la sincronización de datos en tiempo real entre dispositivos y usuarios.

¿Qué es una sala? Una sala es el lugar al que entras en una reunión de Google, en Microsoft Teams, o en un archivo en Figma, por ejemplo, tienes la idea de la sala que todos los que están en esta sala estarán sincronizados juntos todo el contenido, luego tienes al participante, el ID que usualmente es el correo electrónico o algún UID, y el nombre. Luego simplemente creas un nuevo puntero del ratón, pasando el elemento, lo añades a la sala, y se sincroniza y hace toda la magia.

Pero vamos aún más allá. Y veamos qué es este puntero del ratón. ¿Y cómo funciona esto entre todos estos dispositivos? Bueno, el puntero del ratón tiene tres funcionalidades principales. Tú ves cuando alguien mueve su ratón, así que obtienes la información sobre la posición de los punteros de otros participantes. Actualizas tu posición para todos, así que dejas que todos sepan dónde está tu ratón. Y luego tienes que hacerlo realmente rápido y fluido, para que no parezca lento, ¿verdad? Así que veamos cómo hacemos cada uno de estos.

El primero tenemos este estado aquí. Esto es una cosa de React, pero puede ser un simple objeto de JavaScript con una posición X y Y. Y tenemos este canal. Hablaré más sobre esto más tarde, al que me suscribo, que estoy escuchando. También voy a hablar más sobre esto más tarde. Un evento llamado movimiento del ratón. Cuando escucho algo de este evento, entonces uso esta función de callback en movimiento del ratón. Cuando se activa esta función de callback, recibo un mensaje. El mensaje contiene un dato, y el dato contiene una X y una Y, y establezco la posición del ratón a esta posición. Y luego tienes que, por supuesto, hacer todos los estilos y toda la posición superior, saludo, o algo así. Pero este es el mecanismo detrás de esto.

Por el otro lado, tenemos que actualizar nuestra posición para todos. Así que escuchamos el documento en movimiento del ratón, lo mismo, mismo callback, que recibimos un evento. Tomamos el cliente X, el cliente Y a una variable de posición, y luego lo publicamos. Así que publicamos al mismo evento que hemos visto antes, el ratón se movió, así que todos lo escuchan. Bien, ahora el corazón. Hazlo realmente rápido y fluido. Bien, así que este es el mismo código que hemos visto antes, pero con algo más añadido, una API nativa de JavaScript que es requestAnimationFrame, que nos aseguramos de actualizar a 30 FPS. Pero ese no es el punto aquí. Bien, sigamos.

¿Qué es este canal? ¿De dónde viene esto? Así que el canal, tenemos esta regla, creamos un nuevo tiempo real. Bien, así que este tiempo real es un componente que sincronizamos datos entre dispositivos y entre usuarios. En este tiempo real, podemos conectarnos a un canal.

4. Exploring Mouse Handler Channels

Short description:

Podemos conectarnos al canal del manejador de mouse para los punteros del ratón. El canal sigue el patrón Publish-Subscribe, donde los eventos se suscriben con callbacks. Los eventos y sus callbacks asociados se almacenan en un objeto gráfico. Cuando se publica un evento con datos, se llaman los callbacks asociados. Este mecanismo opera en un entorno local dentro de la misma instancia.

Podemos conectarnos al canal del manejador de mouse. Así que este canal es todo lo relacionado con los punteros del ratón. Podemos tener un canal para ver qué línea, podemos tener un canal para ver la red de la otra persona para ver si tienen mala conexión o no. Y luego añadimos este tiempo real a nuestra sala. Así que se sincroniza entre todos.

Bien, ¿qué es este canal? El canal tiene un subscribe, tiene un publish, y eso es todo. Bien, así que vamos a preguntar a JPT. Espera, no, no necesito preguntar a JPT esto. Sé lo que es esto. Sabes lo que es esto, ¿verdad? Esto es un PubSub. Este es el patrón PubSub. El publicador-suscriptor es uno de los patrones de diseño y es exactamente esto. Así que veamos el código detrás de este patrón y veamos cómo funciona.

Así que en el método subscribe, vemos, déjame volver aquí solo un poco para mostrar este objeto estático llamado event. Este será un objeto gráfico, ¿de acuerdo? Y esto será relevante para nosotros cuando veas lo que está pasando, en el subscribe y en el publish. Así que cuando me suscribo a algo, tengo un nombre del evento, luego tengo un callback, y hago muchas cosas. Para hacerlo más fácil de entender, marcaré el nombre del evento aquí para que lo entendamos mejor, ¿de acuerdo? Así que estoy recibiendo un movimiento del ratón y un callback.

Así que si este objeto gráfico event tiene un movimiento del ratón, entonces seguiré con mi código. Si no lo tiene, crearé un array vacío, ¿de acuerdo? Así que tenemos un evento con movimiento del ratón con un array vacío. Y luego, una vez que verifico esto, puedo empujar el callback a este array. Así que cada vez que alguien se suscribe a movimiento del ratón, entonces va a este array. Y luego veamos de qué se trata el publish. El publish, recibes el nombre del evento y luego los datos que quieres publicar. Nuevamente, marcaré esto un poco para hacerlo más fácil de entender. Así que cuando empujas movimiento del ratón, recibes tus datos, y luego vas al evento, y ves el evento movimiento del ratón allí y para cada elemento de este array, llamas a la función callback que tiene allí, que has empujado con los datos. Eso es todo. Así es como se hace. Bueno, es esto, pero tiene algo más. Tiene una cosa más aquí. Porque todo esto funciona en un entorno local en la misma instancia.

5. WebSockets: Enabling Real-Time Communication

Short description:

Si haces esto con otro navegador, este pubsub, no se sincronizará entre las dos instancias de ese navegador. Tienes que tener algo para comunicarte entre las instancias. Algo más, y eso son los WebSockets. WebSockets proporcionan un protocolo para la comunicación continua bidireccional entre el cliente y el servicio, permitiendo la comunicación en tiempo real.

Si haces esto con otro navegador, este pubsub, no se sincronizará entre las dos instancias de ese navegador. Tienes que tener algo para comunicarte entre las instancias. Algo más, y eso son los WebSockets.

¿Qué son los WebSockets? Bueno, WebSockets proporciona un protocolo que permite la comunicación continua bidireccional entre el cliente y el servicio, permitiendo la comunicación en tiempo real. ¿Cómo funciona esto? El cliente inicia una llamada. El cliente inicia un WebSocket handshake con el servidor, y una vez establecido, el mensaje puede ser enviado en ambas direcciones sin necesidad de restablecer la conexión.

Es diferente de la solicitud HTTP en la que llamas a algo, obtienes algo, pones algo, publicas algo, y hace todo el handshake. Cierra la conexión, cosas así. Esto se mantiene abierto. La conexión no se cierra. Tiene una conexión persistente. Debido a eso, tiene baja latencia. Es ideal para chat, juegos y actualizaciones en vivo, y también es bidireccional. Tanto el cliente como el servidor pueden enviar un mensaje sin necesidad de que el otro haga algo. Pero esto nos lleva a un problema.

6. Handling Counter Conflicts with CR-DTS

Short description:

Digamos que en el servidor tengo este contador igual a cero, y ambos dispositivos que están conectados dicen que el contador ahora es uno. Usamos CR-DTS, un tipo de datos relacionado sin conflictos, para sincronizar cosas entre dispositivos. Es un objeto un poco más complejo, pero lo resuelve todo. Te mostraré algunos recursos, incluyendo el CRDT-R Collaborative Protocol of the Future de Piyush Pourwell y el Learning JavaScript Design Patterns de Addy Oslanyi.

Digamos que en el servidor tengo este contador igual a cero, y ambos dispositivos que están conectados dicen que el contador ahora es uno, y lo dicen exactamente al mismo tiempo. ¿Cómo manejamos esto? ¿Es solo contador uno? No lo creo, porque uno está diciendo uno, el otro está diciendo otro. Este contador en total debería ser igual a cero. Usamos CR-DTS. Es un tipo de datos relacionado sin conflictos. Es un tipo especial de estructura de datos que te permite sincronizar cosas entre dispositivos.

Esta es una de las cosas más importantes que necesitamos aprender en estos tiempos, porque creo que va a ser mucho trabajo. Va a ser una cosa realmente estándar en el futuro en el desarrollo de software. Por un lado, tengo este contador, y no es solo un número simple. Es un objeto que contiene un URID con el valor uno, y en el otro lado, otro URID con el mismo valor uno. Este ID es diferente, y eso te permite ver ambos números sin conflicto cuando quieres contarlo. Cuando quieres contarlo, simplemente cuentas estos valores.

Es un objeto un poco más complejo, pero lo resuelve todo. Hay más, por supuesto, pero entiendes la idea. Tiene sus propios criterios, sus propias reglas, pero esto es un vistazo realmente a WebSockets y estos tipos de datos relacionados sin conflictos. Te mostraré algunos recursos. Este CRDT-R Collaborative Protocol of the Future, escrito por Piyush Pourwell. Espero estar leyendo bien su nombre. Este artículo está disponible en Medium, y creo que es un gran artículo. Hablando de recursos, también estoy haciendo referencia al Learning JavaScript Design Patterns de Addy Oslanyi. Este libro es realmente increíble, realmente simple de entender. También hago referencia a este How to Use WebSockets with Flutter, que es un artículo en DevTool. Hago referencia a esto aunque esta es una conferencia de JavaScript, pero porque la explicación de WebSockets para mí fue una de las mejores, esta simple y directa y con algunas ilustraciones increíbles, incluidas las que uso aquí. Otro artículo es el Understanding and Implementing Event-Driven Communication and Development, un artículo mío, también disponible en DevTool.

Bien, creo que esto es todo. Muchas gracias por ver. ¡Nos vemos! Microsoft Mechanics www.microsoft.

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

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
React Advanced 2021React Advanced 2021
47 min
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
Top Content
The Talk discusses the balance between flexibility and consistency in design systems. It explores the API design of the ActionList component and the customization options it offers. The use of component-based APIs and composability is emphasized for flexibility and customization. The Talk also touches on the ActionMenu component and the concept of building for people. The Q&A session covers topics such as component inclusion in design systems, API complexity, and the decision between creating a custom design system or using a component library.
Entendiendo la Arquitectura Fiber de React
React Advanced 2022React Advanced 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
Thinking Like an Architect
Node Congress 2025Node Congress 2025
31 min
Thinking Like an Architect
Top Content
In modern software development, architecture is more than just selecting the right tech stack; it involves decision-making, trade-offs, and considering the context of the business and organization. Understanding the problem space and focusing on users' needs are essential. Architectural flexibility is key, adapting the level of granularity and choosing between different approaches. Holistic thinking, long-term vision, and domain understanding are crucial for making better decisions. Effective communication, inclusion, and documentation are core skills for architects. Democratizing communication, prioritizing value, and embracing adaptive architectures are key to success.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.

Workshops on related topic

Domina los Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Domina los Patrones de JavaScript
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante esta masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debería conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final de la masterclass, los participantes ganarán una nueva confianza en su capacidad para escribir código JavaScript de alta calidad que resista el paso del tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y la comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento de la carrera y las oportunidades de avance en la industria del software
IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
React Patterns Made Simple
React Day Berlin 2024React Day Berlin 2024
62 min
React Patterns Made Simple
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Aprende patrones de React ampliamente utilizados, incluyendo HOCs, Compound Components, Provider Patterns, Functions as Child, y Portals, para escribir código más limpio y eficiente y crear aplicaciones escalables y mantenibles.Visión general En esta masterclass, los espectadores aprenderán sobre patrones clave de React que pueden hacer su código más eficiente, legible y mantenible. Presentaremos cada patrón, explicaremos cómo funciona y demostraremos ejemplos prácticos. Al final de la sesión, los participantes tendrán una comprensión sólida de cómo usar estos patrones en sus proyectos.Objetivos de aprendizajeHOCs Compound Components Provider Patterns Functions as Child Portals Modularidad Mantenibilidad Aplicación en el mundo real.
Masterclass de alto rendimiento Next.js
React Summit 2022React Summit 2022
50 min
Masterclass de alto rendimiento Next.js
Workshop
Michele Riva
Michele Riva
Next.js es un marco convincente que facilita muchas tareas al proporcionar muchas soluciones listas para usar. Pero tan pronto como nuestra aplicación necesita escalar, es esencial mantener un alto rendimiento sin comprometer el mantenimiento y los costos del servidor. En este masterclass, veremos cómo analizar el rendimiento de Next.js, el uso de recursos, cómo escalarlo y cómo tomar las decisiones correctas al escribir la arquitectura de la aplicación.
Mejores Prácticas y Patrones para Administrar Solicitudes de API y Estados
React Advanced 2022React Advanced 2022
206 min
Mejores Prácticas y Patrones para Administrar Solicitudes de API y Estados
Workshop
Thomas Findlay
Thomas Findlay
Con el surgimiento de frameworks, como React, Vue o Angular, la forma en que se construyen los sitios web ha cambiado a lo largo de los años. Las aplicaciones modernas pueden ser muy dinámicas y realizar múltiples solicitudes de API para poblar un sitio web con contenido actualizado o enviar nuevos datos a un servidor. Sin embargo, este cambio de paradigma ha introducido nuevos problemas con los que los desarrolladores deben lidiar. Cuando una solicitud de API está pendiente, tiene éxito o falla, el usuario debe recibir una retroalimentación significativa. Otros problemas pueden incluir el almacenamiento en caché de datos de API o la sincronización del estado del cliente con el servidor. Todos estos problemas requieren soluciones que deben ser codificadas, pero pueden volverse rápidamente inmanejables y dar como resultado una base de código difícil de ampliar y mantener. En este masterclass, cubriremos cómo manejar las solicitudes de API, los estados de API y la cancelación de solicitudes mediante la implementación de una Capa de API y combinándola con React-Query.
Prerrequisitos: Para aprovechar al máximo este masterclass, debes estar familiarizado con React y Hooks, como useState, useEffect, etc. Si deseas codificar junto con nosotros, asegúrate de tener Git, un editor de código, Node y npm instalados en tu máquina.