Retour aux articles

Ce hook de React sauvegarde un paramètre URL sans recharger la page !

Ce hook permet de changer un paramètre d'URL sans recharger la page
1 minutes de lecture- 47 vues

J'ai découvert ce hook il y a quelques jours sur le Discord de Remix. Encore mieux que le hook useSearchParams(), qui permet de modifier les paramètres dans l'URL. Il effectue également un rechargement des données côté serveur (et donc, de la page).

useUpdateQueryStringValueWithoutNavigationHeader Icon

Je souhaitais éviter de recharger la page à chaque fois, et j'ai découvert useUpdateQueryStringWithoutNavigation.

Lien vers le hook : https://github.com/kentcdodds/kentcdodds.com/blob/main/app/utils/misc.tsx#L299

useUpdateQueryStringValueWithoutNavigation.tsx

_28
function useUpdateQueryStringValueWithoutNavigation(
_28
queryKey: string,
_28
queryValue: string,
_28
) {
_28
React.useEffect(() => {
_28
const currentSearchParams = new URLSearchParams(window.location.search)
_28
const oldQuery = currentSearchParams.get(queryKey) ?? ''
_28
if (queryValue === oldQuery) return
_28
_28
if (queryValue) {
_28
currentSearchParams.set(queryKey, queryValue)
_28
} else {
_28
currentSearchParams.delete(queryKey)
_28
}
_28
const newUrl = [window.location.pathname, currentSearchParams.toString()]
_28
.filter(Boolean)
_28
.join('?')
_28
// alright, let's talk about this...
_28
// Normally with remix, you'd update the params via useSearchParams from react-router-dom
_28
// and updating the search params will trigger the search to update for you.
_28
// However, it also triggers a navigation to the new url, which will trigger
_28
// the loader to run which we do not want because all our data is already
_28
// on the client and we're just doing client-side filtering of data we
_28
// already have. So we manually call `window.history.pushState` to avoid
_28
// the router from triggering the loader.
_28
window.history.replaceState(null, '', newUrl)
_28
}, [queryKey, queryValue])
_28
}

Articles similaires
Gère les erreurs avec le framework Remix.js
6 minutes de lecture - 326 vuesRemixReactJS

Comment gérer les erreurs avec Remix ? (ErrorBoundary)

Avoir des erreurs Javascript ne fait jamais plaisir. Mais il existe le composant ErrorBoundary). Dans ce guide, tu vas découvrir comment afficher un composant d'erreur personnalisé en pour protéger toutes les pages de ton application.

Rejoins la

newsletter