Type-Safe URL State Management in React With nuqs

Bookmark
SlidesGithubProject website
Rate this content

Hay muchas maneras de gestionar el estado en aplicaciones modernas de React, pero la URL en sí misma es un potente gestor de estado oculto que a menudo se pasa por alto.

Esta charla introduce `nuqs`, una biblioteca que simplifica la gestión del estado de la URL en React. Exploraremos los beneficios de este enfoque: compartibilidad, navegación por el historial e interacción declarativa cliente-servidor.

A través de una demostración en vivo, aprenderás cómo migrar de React.useState a nuqs’ useQueryState mientras navegamos por conceptos como parámetros de búsqueda solo para el cliente frente a los conscientes del servidor. También cubriremos buenas prácticas para URLs bonitas y seguras en cuanto a tipos, y cómo evitar errores comunes como los límites de tasa del navegador y las restricciones de tamaño de URL.

Si alguna vez te has preguntado qué estado pertenece a la URL y cómo escalarlo, esta charla te dará las respuestas.

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

François Best
François Best
30 min
28 Nov, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
François Best introduce nuqs, un gestor de estado de URL para React, que ofrece habilidades de teletransportación y viaje en el tiempo. Nuqs aborda los límites de tasa del navegador en las actualizaciones de URL y crea puntos de entrada en la aplicación al poner el estado en la URL. Nuqs.js permite la renderización del lado del servidor y la creación de interfaces de usuario compartibles con un enfoque declarativo. La fuente de la URL se utiliza como verdad para el manejo del estado y la finalización de la actualización de la URL se realiza en nuqs. Se admite el manejo de parámetros de URL seguros en cuanto a tipos y el análisis de compresión, asegurando la seguridad y la seguridad de enrutamiento con la integración de TanStack.

1. Understanding URL State in React

Short description:

François Best, un ingeniero de software, presenta nuqs, un gestor de estado de parámetros de búsqueda con seguridad de tipos para React. Almacenar el estado en la URL ofrece habilidades de teletransportación y viaje en el tiempo. La URL sirve como un enlace de comunicación bidireccional entre el cliente y el servidor, permitiendo el intercambio de datos. Comprender las limitaciones del estado de la URL es crucial para los ingenieros.

Hola a todos. Mi nombre es François Best. Soy un ingeniero de software freelance de Grenoble en los Alpes franceses. Y hoy quiero hablarles sobre esta biblioteca que hice llamada nuqs. Es utilizada por empresas de todo el mundo como Sentry, Superbase, Vercel, Clerk, y muchas más. Y es un gestor de estado de parámetros de búsqueda con seguridad de tipos para React. Su objetivo es hacer que los estados de URL sean agradables en React, en todo React, todos esos tipos soportados.

¿Qué es exactamente el estado de URL? Es la idea de almacenar parte del estado de nuestra aplicación en los parámetros de búsqueda o cadena de consulta, esa tienda de clave-valor después de la parte del signo de interrogación de la URL. ¿Por qué querrías hacer esto? Hay una razón incorrecta. Si lo que quieres lograr es no perder las actualizaciones de estado que hiciste cuando recargas la página, esa no es una razón suficiente por sí sola para ponerlo en la URL. Porque la resiliencia al recargar es más un efecto secundario, y puedes lograrlo con otros medios como el almacenamiento local, por ejemplo.

La verdadera razón por la que quieres poner estados en la URL es que le da a tus aplicaciones dos superpoderes. El primero es la teletransportación. Al compartir un enlace con otra persona, teletransportas la representación en memoria de ese estado desde tu navegador al de ellos, para que puedan ver lo mismo que tú, continuar donde tú lo dejaste. Esto es también algo que llamamos deep linking. El segundo superpoder es el viaje en el tiempo. Un marcador es una forma de enviar un enlace hacia adelante en el tiempo a tu yo futuro. El historial de tu navegador es una forma de viajar atrás en el tiempo, para recordar estados del pasado. Si usas el botón de retroceso del navegador para depurar tu estado como un deshacer-rehacer, solo ten en cuenta que podrías romper el botón de retroceso. Ten en cuenta eso.

Entonces, ¿cómo funciona en la práctica? Si vemos la URL como el límite entre el cliente y el servidor, se convierte en este lugar natural para que intercambien datos entre sí. El cliente puede adjuntar algunos estados en la solicitud del documento en el que está, el servidor lo recoge, lo usa para la obtención de datos, filtrado, renderizado de contenido personalizado. Nada nuevo sobre esta parte. Así es como la web ha estado funcionando siempre. La principal diferencia es que ahora tenemos un cliente que puede reaccionar a los cambios en la URL, y así el servidor también puede responder usando el mismo sistema. Con un redireccionamiento, puede pasar algún estado de vuelta al cliente para que lo maneje del lado del cliente. Así que tenemos este enlace de comunicación bidireccional entre el cliente y el servidor usando solo el texto de la URL, lo cual es bastante poderoso. Ahora, hay algunas advertencias a este enfoque, y creo que como buenos ingenieros es importante que conozcamos las limitaciones de los sistemas con los que estamos trabajando. Así que pasaré por cinco problemas diferentes que puedes encontrar con el estado de la URL. El primero es que la URL tiene un límite de tamaño.

2. Challenges of URL State Management

Short description:

Los enlaces largos suponen una limitación social. El control sobre los enlaces compartidos es esencial. Nuqs aborda los límites de tasa del navegador en las actualizaciones de URL por seguridad. Se crean puntos de entrada en la aplicación al poner el estado en la URL.

La limitación práctica no va a ser técnica, será social. Es la de nosotros los humanos, porque no nos gustan los enlaces largos. Por ejemplo, entre estos dos enlaces, que son semánticamente equivalentes, ambos representan un estado de tabla de 10 pilas, ¿en cuál preferirías hacer clic? El segundo, exactamente. Porque primero, parece menos intimidante, es más pequeño, por lo que se ajusta a nuestros criterios. Pero también puedes entender lo que va a hacer solo con leerlo. Es una interfaz de usuario. Es la primera interfaz de usuario que tus usuarios verán antes de llegar a tu aplicación. Así que quieres diseñar tus enlaces al menos tan bien como tus imágenes de open graph.

El segundo problema que podríamos tener con esto es que una vez que los usuarios han compartido enlaces por internet, están fuera de tu control. Y si quieres introducir cambios importantes en los programas de búsqueda que aceptas en tu página, ahora tendrás que ejecutar migraciones contra esas URLs que llegan. Porque no quieres romper los enlaces existentes. Las URLs geniales no cambian, quieres respetar la semántica de los enlaces que se han compartido en el pasado tanto como puedas. Y así, esto se puede hacer con middleware de migraciones y redirecciones para devolver a tu aplicación el resultado de la URL migrada.

Otro problema que no es muy conocido es que los navegadores limitan la tasa de actualizaciones de URL cuando las actualizas del lado del cliente, por razones de seguridad. Y nuqs resuelve esto con una característica que me gusta llamar seguridad temporal, que es el desacoplamiento de la UI. Así que tienes actualizaciones de estado local optimistas instantáneas para métricas como AMP y mantener tu aplicación receptiva. Y por otro lado, limitando las actualizaciones de URL a una tasa que el navegador pueda manejar. Notas que en realidad no tienen la misma tasa. Así que necesita adaptarse a esto. Y además de esto, puedes agregar algunas semánticas de debounce en caso de que solo estés interesado en el estado final para actualizaciones de alta frecuencia como entradas de texto o un deslizador, por ejemplo. Otro problema que puedes encontrar es que al poner el estado en la URL, creas puntos de entrada en tu aplicación.

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

Todo Más Allá de la Gestión de Estado en Tiendas con Pinia
Vue.js London Live 2021Vue.js London Live 2021
34 min
Todo Más Allá de la Gestión de Estado en Tiendas con Pinia
Top Content
State management is not limited to complex applications and transitioning to a store offers significant benefits. Pinia is a centralized state management solution compatible with Vue 2 and Vue 3, providing advanced devtools support and extensibility with plugins. The core API of Pinia is similar to Vuex, but with a less verbose version of stores and powerful plugins. Pinia allows for easy state inspection, error handling, and testing. It is recommended to create one file per store for better organization and Pinia offers a more efficient performance compared to V-rex.
Uso efectivo de useEffect
React Advanced 2022React Advanced 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
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.
Los Átomos de Jotai Son Simplemente Funciones
React Day Berlin 2022React Day Berlin 2022
22 min
Los Átomos de Jotai Son Simplemente Funciones
Top Content
State management in React is a highly discussed topic with many libraries and solutions. Jotai is a new library based on atoms, which represent pieces of state. Atoms in Jotai are used to define state without holding values and can be used for global, semi-global, or local states. Jotai atoms are reusable definitions that are independent from React and can be used without React in an experimental library called Jotajsx.
Anunciando Starbeam: Reactividad Universal
JSNation 2022JSNation 2022
27 min
Anunciando Starbeam: Reactividad Universal
Starbeam is a library for building reactive user interfaces with JavaScript, similar to Svelte, Vue, and Ember. It provides a data structure and query feature for filtering and sorting. The useStarBeam function ensures JSX reconciliation only occurs when reactive dependencies change. Starbeam tracks every read and write operation to update the component accordingly. It can be used with React and other frameworks, and offers debugging tools and locale integration.
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.
Gestión del estado en React con Context y Hooks
React Summit Remote Edition 2021React Summit Remote Edition 2021
71 min
Gestión del estado en React con Context y Hooks
Workshop
Roy Derks
Roy Derks
Mucho ha cambiado en el mundo de la gestión del estado en React en los últimos años. Donde Redux solía ser la principal biblioteca para esto, la introducción de las API de Contexto y Hooks de React ha revolucionado las cosas. Ya no necesitas bibliotecas externas para manejar tanto el estado del componente como el estado global en tus aplicaciones. En este masterclass aprenderás los diferentes enfoques para la gestión del estado en la era post-Redux de React, ¡todos basados en Hooks! Y como bonificación, exploraremos dos próximas bibliotecas de gestión del estado en el ecosistema de React.