React Query API Design – Lecciones Aprendidas

Rate this content
Bookmark

React Query es una biblioteca popular para mantener el estado asincrónico, más a menudo el estado devuelto de la obtención de datos. Ha crecido tanto en popularidad en los últimos años que ahora se utiliza en casi el 20% de todas las aplicaciones de React. En cierta medida, esto se atribuye a su facilidad de uso y a la gran experiencia del desarrollador.


En esta charla, el mantenedor de React Query, Dominik, nos guiará a través de algunas de las decisiones de diseño de la API que se tomaron en React Query para llegar a esa DX. Escucharás historias sobre cosas que salieron bien, pero también sobre compensaciones y errores que se cometieron, y qué lecciones podemos aprender todos de ellos.

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

Dominik Dorfmeister
Dominik Dorfmeister
26 min
25 Oct, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Estoy muy emocionado de estar aquí hoy, dando mi primera charla en vivo en una conferencia presencial. Dominik, el mantenedor de React Query, recorre las decisiones de diseño de la API, incluidas historias de éxito, compensaciones y errores. Tener Linsley diseñó la API de consulta de tamaño mediano de React Query para ser mínima, intuitiva, poderosa y flexible. Las versiones principales en open source requieren esfuerzos de marketing, pero no principalmente para agregar nuevas características. TypeScript es crucial para construir proyectos y gestionar las demandas de los usuarios en open source puede ser un desafío. La adición de la opción de páginas máximas mejoró el rendimiento y evitó recargas innecesarias. La inversión de control da flexibilidad a los usuarios, pero pueden ocurrir errores en el diseño de la API. El open source requiere gestión del tiempo y retroalimentación de los usuarios. El diseño de la API está influenciado por la facilidad de tipado y el buen soporte de TypeScript. Involucrarse en open source implica prueba y error y unirse a plataformas comunitarias como TanStack Discord. El viaje de Dominik comenzó durante la pandemia y se le puede encontrar en Twitter, TanStack Discord y su blog.

1. Introduction to React Query API Design

Short description:

Estoy muy emocionado de estar aquí hoy, dando mi primera charla en vivo en una conferencia presencial. Me llamo Dominik, soy ingeniero de software de Viena, y he mantenido la popular biblioteca de código abierto React Query durante los últimos tres años y medio. Quiero guiarte a través de las decisiones de diseño de la API que hemos tomado, incluyendo historias de éxito, compensaciones y errores. El diseño de API es difícil, y la dulce API de React Query ha contribuido a su éxito.

♪ Estoy muy emocionado de estar aquí hoy, porque esta es realmente la primera vez que doy una charla en vivo en una conferencia presencial. Um, sí, gracias. Um... Así que pensé que quería tomar una foto rápida solo para recordar esto para siempre. Está bien. Sí, está bien. Genial, gracias.

De todos modos, me llamo Dominik. Soy ingeniero de software de Viena, donde trabajo como líder técnico de front-end en Verity. Puedes encontrarme en línea como tkdodo casi en todas partes. Y durante los últimos tres años y medio, he mantenido la bastante popular biblioteca de código abierto React Query. Lo siento, PanStack React Query, como la llamamos en estos días.

Pregunta rápida. Por favor, levanten la mano si han oído hablar de esa biblioteca antes. Sí, wow. Bien, eso es un montón de manos. Eso es genial, porque significa que tal vez realmente conozcan algunas de las APIs de las que voy a hablar hoy. Porque, ya sabes, hoy quiero guiarte a través de algunas de las decisiones de diseño de la API que hemos tomado en React Query en los últimos años. Um, contar algunas historias sobre cosas que salieron bien, pero también resaltar algunas de las compensaciones que tuvimos que hacer y, ya sabes, hubo algunos errores que cometimos. Y, sí, tal vez haya algunas lecciones que todos podamos aprender de esos. Y quiero hablar de eso principalmente por dos razones.

Una, creo que el diseño de API es difícil. Si no me crees, esa no es mi cita. Julius dijo eso. Es un tipo realmente inteligente. Mantiene TRPC. También contribuye a React Query de vez en cuando. Así que si él lo dice, probablemente tenga razón. Y la segunda razón es que creo que React Query tiene una API realmente, realmente dulce. Y es una de las razones por las que se ha vuelto tan exitosa en los últimos años.

2. Evolution of React Query API

Short description:

Tener Linsley diseñó la biblioteca con una API de consulta de tamaño medio. Necesita ser tanto mínima e intuitiva, como poderosa y flexible. La complejidad de la API debe crecer con la complejidad de la aplicación. La API useQuery proporciona muchas características de inmediato, y funciones adicionales como useMutation pueden añadirse para tareas más complejas. Como mantenedor de código abierto, he aprendido a no emocionarme con las versiones principales.

Ahora, por supuesto, no puedo atribuirme el mérito de eso. Tener Linsley creó la biblioteca, y él diseñó la mayoría de las APIs. Y de hecho tiene un tweet muy bueno que resume los objetivos de la biblioteca, donde dice que la API de consulta es en realidad de tamaño medio cuando la desglosas toda, pero la parte más importante es que puedes entender y aprender a usarla comenzando con una sola función que proporciona el 80% de toda la propuesta de valor en el primer intento. A partir de ahí, el resto de su API se puede aprender gradualmente si es necesario. Y creo que eso es lo que se necesita para que una biblioteca se vuelva popular. Necesita ser tanto mínima e intuitiva, como poderosa y flexible.

Pero para cualquier API dada, ya sabes, esas dos cosas suelen estar en lados opuestos de la misma escala. Si echamos un vistazo a los métodos de array, por ejemplo, en el lado izquierdo, tendríamos algo como array.join, ¿verdad? Un método muy simple. Hace una cosa y lo hace muy bien, y no hay sorpresas allí. Y en el otro extremo del espectro, tendríamos algo como array.reduce, que es muy poderoso. Podemos implementar todos los demás métodos de array solo con reduce. Pero ya sabes, si esto es lo único que tenemos disponible, probablemente tampoco sería genial, porque también es bastante complicado de leer de vez en cuando.

Ahora, para las bibliotecas, creo que falta la segunda escala, y esa debería ser usualmente la complejidad de la aplicación, porque a medida que la complejidad de tu aplicación crece, realmente quieres que tus APIs se vuelvan más poderosas y flexibles. Y en esa escala, pondría useQuery justo aquí, abajo a la izquierda, si lo llamamos con los argumentos mínimos requeridos, que son básicamente solo la clave de consulta y la función de consulta. Ahora, esa API, creo, sigue siendo bastante simple y fácil de usar, pero nos da muchas cosas ya de inmediato. Obtenemos cosas como almacenamiento en caché, duplicación de solicitudes, actualizaciones en segundo plano, ya sabes, recolección de basura automática, como la lista sigue y sigue. Hay muchas cosas que obtenemos solo con esta llamada de función. Y luego más tarde, podríamos añadir una llamada a useMutation, ¿verdad? para hacer una actualización y luego vincularla de nuevo con invalidar consultas.

Así que, esto ya es un poco más complicado, pero, ya sabes, podemos llegar muy lejos solo con esas dos funciones. Así que, lo pongo justo aquí. Pero a medida que pasa el tiempo y tu aplicación se vuelve más compleja, podrías querer hacer más cosas. Así que, vas a hacer una actualización optimista, tal vez de vez en cuando, o necesitas una consulta infinita. Y esas APIs son ciertamente un poco más complejas. Y hasta arriba, tenemos, por ejemplo, nuestros plugins o las suscripciones de caché, que son realmente, realmente de bajo nivel. Por ejemplo, nuestras herramientas de desarrollo están construidas con las suscripciones de caché. Pero, ya sabes, una vez que llegas a un punto donde necesitas esta complejidad, probablemente estés feliz de que esas existan también, al igual que estás feliz de usar reduce de vez en cuando. Bien, y llegamos a esta API que evoluciona contigo a través de una planificación cuidadosa, muchas iteraciones, y también un par de versiones principales. Y eso me lleva directamente al primer aprendizaje que tuve como mantenedor de código abierto, que es que ya no me emocionan las versiones principales.

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.
SolidJS: ¿Por qué tanto Suspense?
JSNation 2023JSNation 2023
28 min
SolidJS: ¿Por qué tanto Suspense?
Top Content
Suspense is a mechanism for orchestrating asynchronous state changes in JavaScript frameworks. It ensures async consistency in UIs and helps avoid trust erosion and inconsistencies. Suspense boundaries are used to hoist data fetching and create consistency zones based on the user interface. They can handle loading states of multiple resources and control state loading in applications. Suspense can be used for transitions, providing a smoother user experience and allowing prioritization of important content.
Una Guía Práctica para Migrar a Componentes de Servidor
React Advanced 2023React Advanced 2023
28 min
Una Guía Práctica para Migrar a Componentes de Servidor
Top Content
React query version five is live and we'll be discussing the migration process to server components using Next.js and React Query. The process involves planning, preparing, and setting up server components, migrating pages, adding layouts, and moving components to the server. We'll also explore the benefits of server components such as reducing JavaScript shipping, enabling powerful caching, and leveraging the features of the app router. Additionally, we'll cover topics like handling authentication, rendering in server components, and the impact on server load and costs.
React Query y Auth: ¿Quién es responsable de qué?
React Advanced 2021React Advanced 2021
19 min
React Query y Auth: ¿Quién es responsable de qué?
Top Content
This talk introduces React Query and Auth, discussing how React Query maintains server state on the client and handles mutations and data updates. The day spa app example demonstrates the use of React Query to fetch data and handle user authentication. React Query is also useful for managing user data and ensuring accurate data from the server. The talk highlights the importance of addressing the three main players in user data: React Query, Auth Functions, and persistence across sessions.
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.

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.
Fetch, useEffect, React Query, SWR, ¿qué más?
React Advanced 2023React Advanced 2023
102 min
Fetch, useEffect, React Query, SWR, ¿qué más?
Top Content
WorkshopFree
Ondrej Polesny
Ondrej Polesny
En esta masterclass, primero, repasaremos las diferentes formas en que puedes consumir APIs en React. Luego, probaremos cada una obteniendo contenido de un CMS sin cabeza (tanto con REST como con GraphQL) y verificando en detalle cómo funcionan.
Aunque no se requiere un conocimiento avanzado de React, esta será una sesión práctica, por lo que necesitarás clonar un repositorio de GitHub preconfigurado y utilizar tu editor de programación React preferido, como VS Code.
Aprenderás:- Qué diversas opciones de obtención de datos hay en React- Cuáles son las ventajas y desventajas de cada una- Cuáles son los casos de uso típicos y cuándo cada estrategia es más beneficiosa que otras