useContext |
Contexte utilisateur |
|---|---|
| React | |
Syntaxe
| const value = useContext(SomeContext) |
Description
useContext est un crochet React vous permettant de lire et de vous abonner au contexte de votre composante.
Référence
| useContext(SomeContext) |
Utilisation
- Transmission de données en profondeur dans l'arborescence
- Mise à jour des données transmises via le contexte
- Spécification d'une valeur par défaut de secours
- Remplacer le contexte pour une partie de l'arborescence
- Optimisation des rendus lors de la transmission d'objets et de fonctions
Dépannage
- Ma composante ne voit pas la valeur de mon fournisseur
- On obtient toujours un message «undefined» dans se contexte, bien que la valeur par défaut soit différente.
Référence
| useContext(SomeContext) |
Appelez useContext au niveau supérieur de votre composante pour lire et vous abonner au contexte.
- function ProductPage({ productId, referrer, theme }) {
- // Indiquez à React de mettre en cache votre fonction entre les différents rendus...
- const handleSubmit = useCallback((orderDetails) => {
- post('/product/' + productId + '/buy', {
- referrer,
- orderDetails,
- });
- }, [productId, referrer]); // ...donc, tant que ces dépendances ne changent pas...
-
- return (
- <div className={theme}>
- {/* ...La composante ShippingForm recevra les mêmes propriétés et pourra ainsi éviter le re-rendu inutile. */}
- <ShippingForm onSubmit={handleSubmit} />
- </div>
- );
- }
Paramètres
| Nom | Description |
|---|---|
| SomeContext | Le contexte précédemment créé avec createContext. Le contexte lui-même ne contient pas d'informations, il représente uniquement le type d'informations que vous pouvez fournir ou lire à partir des composantes. |
Valeurs renvoyées
useContext renvoie la valeur de contexte du composante appelant. Elle est déterminée comme la valeur transmise au SomeContext le plus proche au-dessus de la composante appelant dans l'arborescence. En l'absence de fournisseur de ce type, la valeur renvoyée sera la valeur par défaut (defaultValue) transmise à createContext pour ce contexte. La valeur renvoyée est toujours à jour. React réaffiche automatiquement les composantes qui lisent un contexte si celui-ci change.
Avertissements
L'appel useContext() dans une composante n'est pas affecté par les fournisseurs renvoyés par le même composante. Le <Context> correspondant doit se trouver au-dessus du composante effectuant l'appel useContext().
React réaffiche automatiquement tous les enfants utilisant un contexte particulier, à partir du fournisseur qui reçoit une valeur différente. Les valeurs précédentes et suivantes sont comparées à l'aide de la comparaison Object.is. Ignorer les rendus répétés avec mémo n'empêche pas les enfants de recevoir de nouvelles valeurs de contexte.
Si votre système de build produit des modules dupliqués dans la sortie (ce qui peut arriver avec les liens symboliques), cela peut endommager le contexte. Transférer un élément via le contexte ne fonctionne que si le SomeContext utilisé pour fournir le contexte et le SomeContext utilisé pour le lire sont exactement le même objet, comme déterminé par une comparaison ===.
Utilisation
Transmission de données en profondeur dans l'arborescence.
Appelez useContext au niveau supérieur de votre composante pour lire le contexte et vous y abonner.
- import { useContext } from 'react';
-
- function Button() {
- const theme = useContext(ThemeContext);
- // ...
useContext renvoie la valeur du contexte que vous avez passé. Pour déterminer cette valeur, React recherche dans l'arborescence des composantes le fournisseur de contexte le plus proche pour ce contexte.
Pour passer un contexte à un bouton, encapsulez-le ou l'un de ses composantes parents dans le fournisseur de contexte correspondant :
Le nombre de couches de composantes entre le fournisseur et le bouton n'a aucune importance. Lorsqu'un bouton, n'importe où dans le formulaire, appelle useContext(ThemeContext), il reçoit la valeur «dark».
Piège
useContext() recherche toujours le fournisseur le plus proche au-dessus de la composante qui l'appelle. La recherche est ascendante et ne prend pas en compte les fournisseurs de composante depuis lequel vous appelez useContext().