useTransition |
Utilise la transition |
|---|---|
| React | |
Description
useTransition est un crochet React vous permettant de restituer une partie de l'interface utilisateur en arrière-plan.
| const [isPending, startTransition] = useTransition() |
Référence
| useTransition() |
Appelez useTransition au niveau supérieur de votre composante pour marquer certaines mises à jour d'état comme des transitions.
- import { useTransition } from 'react';
-
- function TabContainer() {
- const [isPending, startTransition] = useTransition();
- // ...
- }
Paramètres
useTransition ne prend aucun paramètre.
Renvoie
useTransition renvoie un tableau contenant exactement deux éléments :
- L'indicateur isPending indique si une transition est en attente.
- La fonction startTransition permet de marquer les mises à jour comme transition.
startTransition(action)
La fonction startTransition renvoyée par useTransition permet de marquer une mise à jour comme transition.
Remarque
Les fonctions appelées dans startTransition sont appelées «Actions».
La fonction passée à startTransition est appelée « Action ». Par convention, tout rappel appelé dans startTransition (comme une propriété de rappel) doit être nommé action ou inclure le suffixe «Action» :
Paramètres
| Nom | Description |
|---|---|
| action | Fonction mettant à jour un état en appelant une ou plusieurs fonctions set. React appelle action immédiatement, sans paramètre, et marque toutes les mises à jour d'état planifiées de manière synchrone pendant l'appel de la fonction action comme des transitions. Tous les appels asynchrones attendus dans l'action seront inclus dans la transition, mais nécessitent actuellement d'encapsuler les fonctions set après await dans une startTransition supplémentaire (voir Dépannage). Les mises à jour d'état marquées comme transitions seront non bloquantes et n'afficheront pas d'indicateurs de chargement indésirables. |
Renvois
startTransition ne renvoie rien.
Avertissements
- useTransition est un crochet; il ne peut donc être appelé qu'à l'intérieur de composantes ou de crochets personnalisés. Si vous devez démarrer une transition ailleurs (par exemple, depuis une bibliothèque de données), appelez plutôt la fonction startTransition autonome.
- Vous ne pouvez encapsuler une mise à jour dans une transition que si vous avez accès à la fonction set de cet état. Si vous souhaitez démarrer une transition en réponse à une prop ou à une valeur de Hook personnalisé, essayez plutôt useDeferredValue.
- La fonction passée à startTransition est appelée immédiatement, marquant toutes les mises à jour d'état qui se produisent pendant son exécution comme des Transitions. Si vous tentez d'effectuer des mises à jour d'état dans un setTimeout, par exemple, elles ne seront pas marquées comme des Transitions.
- Vous devez encapsuler toutes les mises à jour d'état après toute requête asynchrone dans une autre startTransition pour les marquer comme des Transitions. Il s'agit d'une limitation connue que nous corrigerons ultérieurement (voir Dépannage).
- La fonction startTransition possède une identité stable ; vous la verrez donc souvent omise des dépendances d'effet, mais son inclusion ne déclenchera pas l'effet. Si le linter vous permet d'omettre une dépendance sans erreur, cela peut se faire en toute sécurité. En savoir plus sur la suppression des dépendances d'effet.
- Une mise à jour d'état marquée comme une Transition sera interrompue par d'autres mises à jour d'état. Par exemple, si vous mettez à jour un composant graphique dans une Transition, mais que vous commencez à saisir du texte dans une entrée alors que le graphique est en cours de rendu, React relancera le rendu du composant graphique après avoir traité la mise à jour de l'entrée.
- Les mises à jour de transition ne permettent pas de contrôler les saisies de texte.
- Si plusieurs transitions sont en cours, React les regroupe actuellement. Cette limitation pourrait être supprimée dans une prochaine version.
Utilisation
Effectuer des mises à jour non bloquantes avec des actions
Appelez useTransition en haut de votre composante pour créer des actions et accéder à l'état en attente :
- import {useState, useTransition} from 'react';
-
- function CheckoutForm() {
- const [isPending, startTransition] = useTransition();
- // ...
- }
useTransition renvoie un tableau contenant exactement deux éléments :
- L'indicateur isPending indique si une transition est en attente.
- La fonction startTransition permet de créer une action.
Pour démarrer une transition, transmettez une fonction à startTransition comme ceci :
- import {useState, useTransition} from 'react';
- import {updateQuantity} from './api';
-
- function CheckoutForm() {
- const [isPending, startTransition] = useTransition();
- const [quantity, setQuantity] = useState(1);
-
- function onSubmit(newQuantity) {
- startTransition(async function () {
- const savedQuantity = await updateQuantity(newQuantity);
- startTransition(() => {
- setQuantity(savedQuantity);
- });
- });
- }
- // ...
- }
La fonction passée à startTransition est appelée « Action ». Vous pouvez mettre à jour l'état et (éventuellement) appliquer des effets secondaires au sein d'une action. Le travail s'effectue en arrière-plan sans bloquer les interactions utilisateur sur la page. Une transition peut inclure plusieurs actions et, pendant son déroulement, votre interface utilisateur reste réactive. Par exemple, si l'utilisateur clique sur un onglet, puis change d'avis et clique sur un autre, le second clic est immédiatement traité sans attendre la fin de la première mise à jour.
Pour informer l'utilisateur des transitions en cours, l'état «isPending» passe à «true» lors du premier appel à startTransition et reste vrai jusqu'à la fin de toutes les actions et l'affichage de l'état final. Les transitions garantissent des effets secondaires dans les actions à terminer afin d'éviter les indicateurs de chargement indésirables. Vous pouvez également fournir un retour immédiat pendant la transition avec useOptimistic.