Retour aux articles

Actualité Remix : v2.3, Nouveaux hooks, flushSync & Vite 5.0

2 minutes de lecture29 vues
Actualité Remix : v2.3, Nouveaux hooks, flushSync & Vite 5.0

La version 2.3 de Remix vient de sortir. Et tu risques d'aimer son nouveau hook.

Présentation du hook useBlocker

useBlocker te permet de bloquer la navigation interne dans ton application Remix, conditionnellement. Marre d'avoir des utilisateurs qui ne remplissent pas entièrement le formulaire ? Avec ce hook, tu vas pouvoir afficher un composant s'ils essaient de quitter la page. Une fois la navigation bloquée, tu laisses le choix à tes visiteurs de confirmer leur action (quitter la page) ou annuler (rester sur la page).

L'exemple ci-dessous, présent dans la documentation de Remix nous explique comment utiliser ce hook.

formulaire.tsx
1
function ImportantForm() {
2
const [value, setValue] = React.useState("");
3
4
// Block navigating elsewhere when data has been entered into the input
5
const blocker = useBlocker(
6
({ currentLocation, nextLocation }) =>
7
value !== "" &&
8
currentLocation.pathname !== nextLocation.pathname
9
);
10
11
return (
12
<Form method="post">
13
<label>
14
Enter some important data:
15
<input
16
name="data"
17
value={value}
18
onChange={(e) => setValue(e.target.value)}
19
/>
20
</label>
21
<button type="submit">Save</button>
22
23
{blocker.state === "blocked" ? (
24
<div>
25
<p>Are you sure you want to leave?</p>
26
<button onClick={() => blocker.proceed()}>
27
Proceed
28
</button>
29
<button onClick={() => blocker.reset()}>
30
Cancel
31
</button>
32
</div>
33
) : null}
34
</Form>
35
);
36
}

Présentation du hook usePrompt (instable)

usePrompt (instable) te permet également de bloquer la navigation interne. Seule différence ? Il utilise la fenêtre native de confirmation de ton navigateur. (Tu n'as pas à créer un composant personnalisé)

formulaire.tsx
1
function ImportantForm() {
2
const [value, setValue] = React.useState("");
3
4
// Block navigating elsewhere when data has been entered into the input
5
unstable_usePrompt({
6
message: "Are you sure?",
7
when: ({ currentLocation, nextLocation }) =>
8
value !== "" &&
9
currentLocation.pathname !== nextLocation.pathname,
10
});
11
12
return (
13
<Form method="post">
14
<label>
15
Enter some important data:
16
<input
17
name="data"
18
value={value}
19
onChange={(e) => setValue(e.target.value)}
20
/>
21
</label>
22
<button type="submit">Save</button>
23
</Form>
24
);
25
}
26

Nouveau paramètre flushSync pour la soumission des formulaires

flushSync (instable) n'est pas un hook, mais il s'utilise de pair avec les hooks useSubmit() et useFetcher() pour soumettre les formulaires.

Cette fonctionnalité est similaire à la méthode flushSync de React (qui te permet de commit les changements d'état de manière synchrone)

La version v2.2 de Remix ajoutait le support instable du compilateur Vite. De son côté, Vite est passé en version 5.0, ce qui implique une optimisation des performances.

Articles similaires
Comment gérer les erreurs avec React Router 7
6 minutes de lecture - 708 vues
ReactJS
Remix

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.

Reste informé
Abonne-toi à notre newsletter pour recevoir les dernières mises à jour et insights.