You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/reference/react/useSyncExternalStore.md
+24-24Lines changed: 24 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,24 +32,24 @@ function TodosApp() {
32
32
}
33
33
```
34
34
35
-
Il renvoie un instantané de cette donnée issue de la source. Vous devrez passer deux fonctions comme arguments :
35
+
Il renvoie un instantané de cette donnée issue de la source. Vous aurez besoin de passer deux fonctions comme arguments :
36
36
37
-
1. La fonction `subscribe` est censé s'abonner à la source et renvoyer une fonction de désabonnement.
38
-
2. La fonction `getSnapshot` est censée lire un instantanée de la donnée souhaitée au sein de la source.
37
+
1. La fonction `subscribe` est censée s'abonner à la source et renvoyer une fonction de désabonnement.
38
+
2. La fonction `getSnapshot` est censée lire un instantané de la donnée souhaitée au sein de la source.
39
39
40
40
[Voir d'autres exemples ci-dessous](#usage).
41
41
42
42
#### Paramètres {/*parameters*/}
43
43
44
-
* `subscribe` : une fonction acceptant un unique argument `callback`argument qui s'abonne à la source de données. Lorsque la source évolue, elle est censée invoquer le `callback` fourni. Ça permettra au composant de faire un nouveau rendu. La fonction `subscribe` est censée renvoyer une fonction qui procède au désabonnement associé.
44
+
* `subscribe` : une fonction acceptant un unique argument `callback` qui s'abonne à la source de données. Lorsque la source évolue, elle est censée invoquer `callback`. Ça permettra au composant de refaire un rendu. La fonction `subscribe` est censée renvoyer une fonction qui procède au désabonnement associé.
45
45
46
-
* `getSnapshot` : une fonction qui renvoie un instantané de la donnée requise par le composant au sein de la source. Tant que la source n'évolue pas, des appels répétés à `getSnapshot` sont censés renvoyés la même valeur. Si la source évolue et que la valeur renvoyée diffère soudain (en comparant à l'aide de [`Object.is`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/is)), React refait un rendu du composant.
46
+
* `getSnapshot` : une fonction qui renvoie un instantané de la donnée requise par le composant au sein de la source. Tant que la source n'évolue pas, des appels répétés à `getSnapshot` sont censés renvoyer la même valeur. Si la source évolue et que la valeur renvoyée diffère soudain (en comparant à l'aide de [`Object.is`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/is)), React refait un rendu du composant.
47
47
48
-
* `getServerSnapshot` **optionnelle** : une fonction qui renvoie un premier instantané de la donnée au sein de la source. Elle ne sera utilisée que pour le rendu côté serveur, et pendant la phase d'hydratation du contenu fourni par le serveur une fois côté client. L'instantané serveur doit être identique qu'il soit exécuté côté serveur ou côté client, il est généralement séréalisé et passé du serveur au client. Si vous omettez cet argument, toute tentative de rendu côté serveur de votre composant lèvera une erreur.
48
+
* `getServerSnapshot` **optionnelle** : une fonction qui renvoie un premier instantané de la donnée au sein de la source. Elle ne sera utilisée que pour le rendu côté serveur, et pendant la phase d'hydratation du contenu fourni par le serveur une fois côté client. L'instantané serveur doit être identique qu'il soit exécuté côté serveur ou côté client : il est donc généralement sérialisé et passé du serveur au client. Si vous omettez cet argument, toute tentative de rendu côté serveur de votre composant lèvera une erreur.
49
49
50
50
#### Valeur renvoyée {/*returns*/}
51
51
52
-
L'instantané actuel issu de la soruce, que vous pouvez utiliser pour votre logique de rendu.
52
+
L'instantané actuel de la valeur issue de la source, que vous pouvez utiliser pour votre logique de rendu.
53
53
54
54
#### Limitations {/*caveats*/}
55
55
@@ -80,10 +80,10 @@ function TodosApp() {
80
80
}
81
81
```
82
82
83
-
Elle renvoie un <CodeStep step={3}>instantané</CodeStep> de la données issue de la source. Vous devrez passez deux fonctions comme arguments :
83
+
Elle renvoie un <CodeStep step={3}>instantané</CodeStep> de la donnée issue de la source. Vous devrez lui passer deux arguments fonctions :
84
84
85
-
1. La fonction <CodeStep step={1}>`subscribe`</CodeStep> est censé s'abonner à la source et renvoyer une fonction de désabonnement.
86
-
2. La fonction <CodeStep step={2}>`getSnapshot`</CodeStep> est censée lire un instantanée de la donnée souhaitée au sein de la source.
85
+
1. La fonction <CodeStep step={1}>`subscribe`</CodeStep> est censée s'abonner à la source et renvoyer une fonction de désabonnement.
86
+
2. La fonction <CodeStep step={2}>`getSnapshot`</CodeStep> est censée lire un instantané de la donnée souhaitée au sein de la source.
87
87
88
88
React utilisera ces fonctions pour garder votre composant abonné à la source et refaire un rendu lorsque la donnée change.
89
89
@@ -115,9 +115,9 @@ export default function TodosApp() {
115
115
// Voici un exemple de source de données tierce
116
116
// que vous pourriez avoir besoin d'intégrer dans React.
117
117
118
-
// Si votre appli est intégralement construite avec React,
119
-
// nous vous recommandons de plutôt utiliser l'état local
120
-
// React pour ça.
118
+
// Si votre appli est intégralement construite avec
119
+
//React, nous vous recommandons de plutôt utiliser
120
+
//l'état local React pour ça.
121
121
122
122
let nextId =0;
123
123
let todos = [{ id: nextId++, text:'Tâche #1' }];
@@ -150,7 +150,7 @@ function emitChange() {
150
150
151
151
<Note>
152
152
153
-
Autant que possible, nous vous recommandons de plutôt utiliser l'état local React avec [`useState`](/reference/react/useState) et [`useReducer`](/reference/react/useReducer). L'API `useSyncExternalStore` est surtout utile pour vous intégrer avec du code existant non React.
153
+
Autant que possible, nous vous recommandons de plutôt utiliser l'état local React avec [`useState`](/reference/react/useState) et [`useReducer`](/reference/react/useReducer). L'API `useSyncExternalStore` est surtout utile pour vous intégrer avec du code existant non basé sur React.
154
154
155
155
</Note>
156
156
@@ -160,7 +160,7 @@ Autant que possible, nous vous recommandons de plutôt utiliser l'état local Re
160
160
161
161
`useSyncExternalStore` est également bien utile pour vous abonner à une valeur exposée par le navigateur et susceptible de changer au fil du temps. Supposez par exemple que vous souhaitiez que votre composant affiche l'état actif ou non de la connexion réseau. Le navigateur expose cette information au travers d'une propriété [`navigator.onLine`](https://developer.mozilla.org/docs/Web/API/Navigator/onLine).
162
162
163
-
Cette valeur peut changer sans que React soit au courant, vous devriez donc la lire avec `useSyncExternalStore`.
163
+
Cette valeur peut changer sans que React le sache, vous devriez donc la lire avec `useSyncExternalStore`.
164
164
165
165
```js
166
166
import { useSyncExternalStore } from'react';
@@ -179,7 +179,7 @@ function getSnapshot() {
179
179
}
180
180
```
181
181
182
-
Vous devez ensuite implémenter la fonction `subscribe`. Il se trouve que lorsque `navigation.onLine` change, le navigateur déclenche soit l'événement [`online`](https://developer.mozilla.org/docs/Web/API/Window/online_event) soit l'événement [`offline`](https://developer.mozilla.org/docs/Web/API/Window/offline_event) sur l'objet `window`. Vous devez abonner l'argument `callback` à ces événements, et renvoyer une fonction qui fait le désabonnement correspondant :
182
+
Vous devez ensuite implémenter la fonction `subscribe`. Il se trouve que lorsque `navigation.onLine` change, le navigateur déclenche l'événement [`online`](https://developer.mozilla.org/docs/Web/API/Window/online_event) ou [`offline`](https://developer.mozilla.org/docs/Web/API/Window/offline_event) sur l'objet `window`. Vous devez abonner l'argument `callback` à ces événements, et renvoyer une fonction qui fait le désabonnement correspondant :
183
183
184
184
```js
185
185
functionsubscribe(callback) {
@@ -244,7 +244,7 @@ function subscribe(callback) {
244
244
}
245
245
```
246
246
247
-
Avec ça, plusieurs composants distincts peuvent utiliser `useOnlineStatus` sans répéter l'implémentation sous-jacente :
247
+
Grâce à ça, plusieurs composants distincts peuvent utiliser `useOnlineStatus` sans avoir à répéter l'implémentation sous-jacente :
248
248
249
249
<Sandpack>
250
250
@@ -310,10 +310,10 @@ function subscribe(callback) {
310
310
311
311
Si votre appli React utilise le [rendu côté serveur](/reference/react-dom/server), vos composants React seront aussi exécutés hors d'un environnement navigateur pour générer le HTML initial. Ça complexifie un peu la connexion à la source de données extérieure :
312
312
313
-
* Si vous vous connectez à une API strictement navigateur, ça ne marchera pas car elle n'existera pas côté serveur.
313
+
* Si vous vous connectez à une API strictement navigateur, ça ne marchera pas car elle n'existera pas, par définition, côté serveur.
314
314
* Si vous vous connectez à une source de données tierce, vous aurez besoin que ses données correspondent côté serveur et côté client.
315
315
316
-
Pour résoudre ces questions, passez une fonction `getServerSnapshot` comme troisième argument à `useSyncExternalStore` :
316
+
Pour pouvoir résoudre ces problématiques, passez une fonction `getServerSnapshot` comme troisième argument à `useSyncExternalStore` :
317
317
318
318
```js {4,12-14}
319
319
import { useSyncExternalStore } from'react';
@@ -336,16 +336,16 @@ function subscribe(callback) {
336
336
}
337
337
```
338
338
339
-
La fonction `getServerSnapshot` est similaire à `getSnapshot`, mais elle n'est exécutée que dans deux cas de figure :
339
+
La fonction `getServerSnapshot` est similaire à `getSnapshot`, mais elle n'est exécutée que dans deux cas :
340
340
341
341
* Côté serveur pour générer le HTML.
342
-
* Côté client lors de [l'hydratation](/reference/react-dom/client/hydrateRoot), c'est-à-dire lorsque React prend le HTML renvoyé par le serveur et le rend interactif.
342
+
* Côté client lors de [l'hydratation](/reference/react-dom/client/hydrateRoot), c'est-à-dire lorsque React reprend la main sur le HTML renvoyé par le serveur pour le rendre interactif.
343
343
344
344
Ça vous permet de fournir une valeur initiale de l'instantané que vous pourrez utiliser avant que l'appli devienne interactive. Si vous n'avez pas de valeur initiale pertinente à fournir lors du rendu côté serveur, omettez cet argument pour [forcer le rendu côté client](/reference/react/Suspense#providing-a-fallback-for-server-errors-and-server-only-content).
345
345
346
346
<Note>
347
347
348
-
Assurez-vous que `getServerSnapshot` renvoie exactement la même valeur lors du rendu client initial que côté serveur. Par exemple, si `getServerSnapshot` renvoie un contenu prérempli del a source de données côté serveur, vous devez transférer ce contenu au client. Une façon d'y parvenir consiste à émettre une balise `<script>` pendant le rendu côté serveur qui définit une globale du genre `window.MY_STORE_DATA`, puis de lire cette globale côté client au sein de `getServerSnapshot`. Votre source de donneés extérieure documente probablement comment faire ça.
348
+
Assurez-vous que `getServerSnapshot` renvoie exactement la même valeur lors du rendu client initial et lors du rendu côté serveur. Par exemple, si `getServerSnapshot` renvoie un contenu prérempli de la source de données côté serveur, vous devez transférer ce contenu au client. Une façon d'y parvenir consiste à émettre une balise `<script>` pendant le rendu côté serveur qui définit une globale du genre `window.MY_STORE_DATA`, puis de lire cette globale côté client au sein de `getServerSnapshot`. Votre source de donneés extérieure documente probablement comment faire ça.
349
349
350
350
</Note>
351
351
@@ -357,7 +357,7 @@ Assurez-vous que `getServerSnapshot` renvoie exactement la même valeur lors du
357
357
358
358
*(« Le résultat de `getSnapshot` devrait être mis en cache », NdT.)*
359
359
360
-
Cette erreur signifie que la fonction `getSnapshot` renvoie un nouvel objet à chaque fois qu'on l'appelle, par exemple :
360
+
Cette erreur signifie que la fonction `getSnapshot` renvoie un nouvel objet à chaque fois qu'on l'appelle :
361
361
362
362
```js {2-5}
363
363
functiongetSnapshot() {
@@ -414,7 +414,7 @@ function subscribe() {
414
414
}
415
415
```
416
416
417
-
Vous pouvez aussi enrober `subscribe` dans [`useCallback`](/reference/react/useCallback) pour ne vous réabonner que lorsqu'une dépendance change :
417
+
Vous pouvez aussi enrober `subscribe` dans un appel à [`useCallback`](/reference/react/useCallback) pour ne vous réabonner que lorsqu'une dépendance change :
0 commit comments