Skip to content

Commit c357e61

Browse files
authored
Merge pull request #641 from reactjs/sync-97489434
Sync with react.dev @ 9748943
2 parents 6abda16 + 2a82c77 commit c357e61

23 files changed

+882
-91
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ Ignore this rule if you're specifically describing an experimental proposal. Mak
7979
- Use semicolons.
8080
- No space between function names and parens (`method() {}` not `method () {}`).
8181
- When in doubt, use the default style favored by [Prettier](https://prettier.io/playground/).
82+
- Always capitalize React concepts such as Hooks, Effects, and Transitions.
8283

8384
### Highlighting
8485

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
"webpack-bundle-analyzer": "^4.5.0"
9898
},
9999
"engines": {
100-
"node": "^16.8.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"
100+
"node": "^16.8.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0"
101101
},
102102
"nextBundleAnalysis": {
103103
"budget": null,

public/images/team/jack-pope.jpg

588 KB
Loading

src/content/community/acknowledgements.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Nous aimerions remercier particulièrement certaines personnes ayant effectué d
1616
* [Andreas Svensson](https://github.com/syranide)
1717
* [Alex Krolick](https://github.com/alexkrolick)
1818
* [Alexey Pyltsyn](https://github.com/lex111)
19+
* [Andrey Lunyov](https://github.com/alunyov)
1920
* [Brandon Dail](https://github.com/aweary)
2021
* [Brian Vaughn](https://github.com/bvaughn)
2122
* [Caleb Meredith](https://github.com/calebmer)

src/content/community/team.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ Les membres actuels de l'équipe React sont listés ci-dessous par ordre alphab
1818
Andrew a commencé le développement web en faisant des sites avec Wordpress, puis il a fini par se persuader de faire du JavaScript. Son passe-temps favori est le karaoké. Selon son humeur du jour, Andrew est soit un méchant Disney, soit une princesse Disney.
1919
</TeamMember>
2020

21-
<TeamMember name="Andrey Lunyov" permalink="andrey-lunyov" photo="/images/team/andrey-lunyov.jpg" github="alunyov" twitter="alunyov" threads="alunyov" title="Ingénieur chez Meta">
22-
Andrey a commencé sa carrière comme designer pour progressivement passer au développement web. Après avoir rejoint l'équipe React Data chez Meta, il a travaillé à ajouter un compilateur incrémental JavaScript dans Relay… pour finir par le retirer plus tard. Hors du boulot, Andrey aime jouer de la musique et faire divers types de sports.
23-
</TeamMember>
24-
2521
<TeamMember name="Dan Abramov" permalink="dan-abramov" photo="/images/team/gaearon.jpg" github="gaearon" twitter="dan_abramov2" title="Ingénieur indépendant">
2622
Dan a commencé à programmer lorsqu'il a découvert par hasard qu'il y avait Visual Basic dans Microsoft Powerpoint. Il a découvert que sa véritable vocation consistait à transformer les tweets de [Sebastian](#sebastian-markbåge) en billets de blog interminables. Dan gagne parfois à Fortnite en se cachant dans un buisson jusqu'à la fin de la partie.
2723
</TeamMember>
@@ -30,6 +26,10 @@ Les membres actuels de l'équipe React sont listés ci-dessous par ordre alphab
3026
Eli a commencé la programmation après avoir été suspendu au collège pour piratage. Il travaille sur React et React Native depuis 2017. Il aime manger des sucreries, en particulier les crèmes glacées et la tarte aux pommes. Vous le trouverez généralement en train d'essayer des trucs un peu fous comme le parkour, les simulateurs de chute libre ou la danse aérienne sur rubans de soie.
3127
</TeamMember>
3228

29+
<TeamMember name="Jack Pope" permalink="jack-pope" photo="/images/team/jack-pope.jpg" github="jackpope" personal="jackpope.me" title="Ingénieur chez Meta">
30+
Peut après avoir découvert AutoHotkey, Jack écrivait des scripts pour automatiser tout ce à quoi il pouvait penser. Lorsqu'il a atteint les limites de l'exercice, il s'est plongé dans le développement web et n'a jamais regardé en arrière. Dernièrement, Jack a travaillé sur la plateforme web d'Instagram, avant de migrer vers React. Son langage de programmation préféré est JSX.
31+
</TeamMember>
32+
3333
<TeamMember name="Jason Bonta" permalink="jason-bonta" photo="/images/team/jasonbonta.jpg" threads="someextent" title="Manager d’ingénieurs chez Meta">
3434
Jason aime faire livrer des tonnes de paquets Amazon au boulot pour pouvoir se construire des forts. Bien qu'il se soit parfois littéralement cloisonné de son équipe, et même s'il ne comprend pas comment fonctionne une boucle for-of, on l'aime pour les qualités uniques qu'il met dans son travail.
3535
</TeamMember>
@@ -74,7 +74,7 @@ Les membres actuels de l'équipe React sont listés ci-dessous par ordre alphab
7474
Sébastien a étudié la psychologie. Il est généralement silencieux. Même lorsqu'il dit quelque chose, ça ne finit par avoir du sens pour le reste d'entre nous que quelques mois plus tard. La véritable pronconciation de son nom de famille est « marc-bau-jai », mais il a fini par tolérer « marc-beige » par pur pragmatisme — une approche qu'il applique aussi à React.
7575
</TeamMember>
7676

77-
<TeamMember name="Sebastian Silbermann" permalink="sebastian-silbermann" photo="/images/team/sebsilbermann.jpg" github="eps1lon" twitter="sebsilbermann" threads="sebsilbermann" title="Ingénieur indépendant">
77+
<TeamMember name="Sebastian Silbermann" permalink="sebastian-silbermann" photo="/images/team/sebsilbermann.jpg" github="eps1lon" twitter="sebsilbermann" threads="sebsilbermann" title="Ingénieur chez Vercel">
7878
Sebastian a appris à programmer pour améliorer les jeux auxquels il jouait en cours dans son navigateur. Ça l'a amené à contribuer à énormément de code en logiciel libre. Lorsqu'il n'est pas en train de coder, il est très occupé à s'assurer qu'on ne le confond pas avec les autres Sebastian et Zilberman de la communauté React.
7979
</TeamMember>
8080

src/content/learn/typescript.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ Nous vous conseillons les ressources suivantes *(toutes en anglais, NdT)* :
453453

454454
- [Le handbook TypeScript](https://www.typescriptlang.org/docs/handbook/) est la documentation officielle du langage et couvre tous les aspects importants.
455455

456-
- [Les notes de versions de TypeScript](https://devblogs.microsoft.com/typescript/) présentent chaque nouvelle fonctionnalité en détails.
456+
- [Les notes de versions de TypeScript](https://devblogs.microsoft.com/typescript/) présentent les nouvelles fonctionnalités en détails.
457457

458458
- [L'antisèche React TypeScript](https://react-typescript-cheatsheet.netlify.app/) est une antisèche synthétique maintenue par la communauté pour utiliser TypeScript avec React, qui couvre pas mal de cas à la marge et aborde plus de sujets que cette page.
459459

src/content/reference/react-dom/flushSync.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ La plupart du temps, vous devriez éviter `flushSync`. Ne l'utilisez qu'en derni
5252

5353
* `flushSync` peut nuire fortement aux performances. Ne l'utilisez qu'avec parcimonie.
5454
* `flushSync` peut forcer des périmètres Suspense en attente à afficher leur contenu de secours.
55-
* `flushSync` peut exécuter des effets en attente et appliquer leurs mises à jour d'état de façon synchrone avant de terminer.
55+
* `flushSync` peut exécuter des Effets en attente et appliquer leurs mises à jour d'état de façon synchrone avant de terminer.
5656
* `flushSync` peut traiter des mises à jour d'état en attente demandées hors de la fonction de rappel si celles-ci sont nécessaires aux mises à jour demandées dans la fonction de rappel. Par exemple, si certaines mises à jour sont en attente suite à un clic, React risque de devoir les traiter avant de traiter celles issues de la fonction de rappel.
5757

5858
---

src/content/reference/react/Profiler.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ function onRender(id, phase, actualDuration, baseDuration, startTime, commitTime
5454
#### Paramètres {/*onrender-parameters*/}
5555

5656
* `id` : la prop textuelle `id` du `<Profiler>` qui vient de boucler son rendu. Elle vous permet d’identifier quelle partie de l’arbre est finalisée lorsque vous utilisez plusieurs profileurs.
57-
* `phase` : `"mount"`, `"update"` ou `"nested-update"`. Ça vous permet de savoir si l’arbre vient d’être monté pour la première fois ou a fait un nouveau rendu suite à un changement dans les props, l’état ou les hooks.
57+
* `phase` : `"mount"`, `"update"` ou `"nested-update"`. Ça vous permet de savoir si l’arbre vient d’être monté pour la première fois ou a fait un nouveau rendu suite à un changement dans les props, l’état ou les Hooks.
5858
* `actualDuration` : la durée en millisecondes du rendu du `<Profiler>` et de ses enfants pour la mise à jour concernée. Ça indique à quel point vos descendants profitent de la mémoïsation (notamment [`memo`](/reference/react/memo) et [`useMemo`](/reference/react/useMemo)). Idéalement, cette valeur devrait décroître de façon significative après le montage initial car la plupart des descendants ne referont un rendu que si leurs props changent.
5959
* `baseDuration` : une estimation de la durée en millisecondes que prendrait un rendu complet du `<Profiler>` et de ses descendants, sans aucune optimisation. Elle est calculée en ajoutant les durées de rendu les plus récentes de chaque composant concerné. Cette valeur représente le coût maximal de rendu (c’est-à-dire le temps initial de montage sans mémoïsation). Comparez-la avec `actualDuration` pour déterminer si la mémoïsation fonctionne.
6060
* `startTime` : un horodatage numérique du début de la mise à jour par React.

src/content/reference/react/StrictMode.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,14 +196,16 @@ ul {
196196
margin: 0;
197197
list-style-type: none;
198198
height: 100%;
199+
display: flex;
200+
flex-wrap: wrap;
201+
padding: 10px;
199202
}
200203

201204
li {
202205
border: 1px solid #aaa;
203206
border-radius: 6px;
204207
float: left;
205208
margin: 5px;
206-
margin-bottom: 20px;
207209
padding: 5px;
208210
width: 70px;
209211
height: 100px;
@@ -283,14 +285,16 @@ ul {
283285
margin: 0;
284286
list-style-type: none;
285287
height: 100%;
288+
display: flex;
289+
flex-wrap: wrap;
290+
padding: 10px;
286291
}
287292

288293
li {
289294
border: 1px solid #aaa;
290295
border-radius: 6px;
291296
float: left;
292297
margin: 5px;
293-
margin-bottom: 20px;
294298
padding: 5px;
295299
width: 70px;
296300
height: 100px;
@@ -377,14 +381,16 @@ ul {
377381
margin: 0;
378382
list-style-type: none;
379383
height: 100%;
384+
display: flex;
385+
flex-wrap: wrap;
386+
padding: 10px;
380387
}
381388

382389
li {
383390
border: 1px solid #aaa;
384391
border-radius: 6px;
385392
float: left;
386393
margin: 5px;
387-
margin-bottom: 20px;
388394
padding: 5px;
389395
width: 70px;
390396
height: 100px;
@@ -467,14 +473,16 @@ ul {
467473
margin: 0;
468474
list-style-type: none;
469475
height: 100%;
476+
display: flex;
477+
flex-wrap: wrap;
478+
padding: 10px;
470479
}
471480

472481
li {
473482
border: 1px solid #aaa;
474483
border-radius: 6px;
475484
float: left;
476485
margin: 5px;
477-
margin-bottom: 20px;
478486
padding: 5px;
479487
width: 70px;
480488
height: 100px;

src/content/reference/react/Suspense.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1362,7 +1362,7 @@ input { margin: 10px; }
13621362

13631363
<Note>
13641364

1365-
Les valeurs différées ainsi que les [transitions](#preventing-already-revealed-content-from-hiding) vous permettent d'éviter d'afficher le contenu de secours Suspense en lui préférant une indication de chargement. Les transitions marquent l'ensemble de leur mise à jour comme non urgente, elles sont donc généralement utilisées par les frameworks et les bibliothèques de routage pour la navigation. Les valeurs différées sont elles surtout utiles dans du code applicatif lorsque vous souhaitez indiquer qu'une partie de l'UI est non urgente, pour lui permettre d'être temporairement « en retard » sur le reste de l'UI.
1365+
Les valeurs différées ainsi que les [Transitions](#preventing-already-revealed-content-from-hiding) vous permettent d'éviter d'afficher le contenu de secours Suspense en lui préférant une indication de chargement. Les transitions marquent l'ensemble de leur mise à jour comme non urgente, elles sont donc généralement utilisées par les frameworks et les bibliothèques de routage pour la navigation. Les valeurs différées sont elles surtout utiles dans du code applicatif lorsque vous souhaitez indiquer qu'une partie de l'UI est non urgente, pour lui permettre d'être temporairement « en retard » sur le reste de l'UI.
13661366

13671367
</Note>
13681368

@@ -1745,7 +1745,7 @@ main {
17451745

17461746
Quand vous avez appuyé sur le bouton, le composant `Router` a affiché `ArtistPage` au lieu de `IndexPage`. Un composant au sein d'`ArtistPage` a suspendu, du coup le plus proche périmètre Suspense a basculé sur son contenu de secours. Comme ce périmètre était proche de la racine, la mise en page complète du site a été remplacée par `BigSpinner`.
17471747

1748-
Pour éviter ça, vous pouvez indiquer que la mise à jour de l'état de navigation est une *transition*, en utilisant [`startTransition`](/reference/react/startTransition) :
1748+
Pour éviter ça, vous pouvez indiquer que la mise à jour de l'état de navigation est une *Transition*, en utilisant [`startTransition`](/reference/react/startTransition) :
17491749

17501750
```js {5,7}
17511751
function Router() {
@@ -1759,7 +1759,7 @@ function Router() {
17591759
// ...
17601760
```
17611761
1762-
Ça dit à React que cette transition d'état n'est pas urgente, et qu'il est préférable de continuer à afficher la page précédente plutôt que de masquer du contenu déjà révélé. À présent cliquer sur le bouton « attend » que `Biography` soit chargé :
1762+
Ça dit à React que cette Transition d'état n'est pas urgente, et qu'il est préférable de continuer à afficher la page précédente plutôt que de masquer du contenu déjà révélé. À présent cliquer sur le bouton « attend » que `Biography` soit chargé :
17631763
17641764
<Sandpack>
17651765
@@ -2134,19 +2134,19 @@ main {
21342134
21352135
</Sandpack>
21362136
2137-
Une transition n'attend pas que *tout* le contenu soit chargé. Elle attend seulement assez longtemps pour éviter d'avoir à masquer du contenu déjà révélé. Par exemple, le `Layout` du site était déjà révélé, ce serait donc dommage de le masquer derrière un *spinner* de chargement. En revanche, le périmètre `Suspense` imbriqué autour d'`Albums` est nouveau, la transition ne l'attend donc pas.
2137+
Une Transition n'attend pas que *tout* le contenu soit chargé. Elle attend seulement assez longtemps pour éviter d'avoir à masquer du contenu déjà révélé. Par exemple, le `Layout` du site était déjà révélé, ce serait donc dommage de le masquer derrière un *spinner* de chargement. En revanche, le périmètre `Suspense` imbriqué autour d'`Albums` est nouveau, la Transition ne l'attend donc pas.
21382138
21392139
<Note>
21402140
2141-
Les routeurs compatibles Suspense sont censés enrober par défaut leurs navigations dans des transitions.
2141+
Les routeurs compatibles Suspense sont censés enrober par défaut leurs navigations dans des Transitions.
21422142
21432143
</Note>
21442144
21452145
---
21462146
2147-
### Indiquer qu'une transition est en cours {/*indicating-that-a-transition-is-happening*/}
2147+
### Indiquer qu'une Transition est en cours {/*indicating-that-a-transition-is-happening*/}
21482148
2149-
Dans l'exemple précédent, une fois que vous avez cliqué sur le bouton, aucune indication visuelle ne vous informe qu'une navigation est en cours. Pour ajouter une indication, vous pouvez remplacer [`startTransition`](/reference/react/startTransition) par [`useTransition`](/reference/react/useTransition), qui vous donne une valeur booléenne `isPending`. Dans l'exemple qui suit, on l'utilise pour modifier le style de l'en-tête du site pendant qu'une transition est en cours :
2149+
Dans l'exemple précédent, une fois que vous avez cliqué sur le bouton, aucune indication visuelle ne vous informe qu'une navigation est en cours. Pour ajouter une indication, vous pouvez remplacer [`startTransition`](/reference/react/startTransition) par [`useTransition`](/reference/react/useTransition), qui vous donne une valeur booléenne `isPending`. Dans l'exemple qui suit, on l'utilise pour modifier le style de l'en-tête du site pendant qu'une Transition est en cours :
21502150
21512151
<Sandpack>
21522152
@@ -2527,13 +2527,13 @@ main {
25272527
25282528
### Réinitialiser les périmètres Suspense à la navigation {/*resetting-suspense-boundaries-on-navigation*/}
25292529
2530-
Pendant une transition, React évitera de masquer du contenu déjà révélé. Ceci dit, lorsque vous naviguez vers une route aux paramètres différents, vous voudrez peut-être indiquer à React que le contenu est *différent*. Vous pouvez exprimer ça avec une `key` :
2530+
Pendant une Transition, React évitera de masquer du contenu déjà révélé. Ceci dit, lorsque vous naviguez vers une route aux paramètres différents, vous voudrez peut-être indiquer à React que le contenu est *différent*. Vous pouvez exprimer ça avec une `key` :
25312531
25322532
```js
25332533
<ProfilePage key={queryParams.id} />
25342534
```
25352535
2536-
Imaginez que vous naviguiez au sein d'une page de profil utilisateur, et que quelque chose suspende. Si cette mise à jour est enrobée dans une transition, elle ne déclenchera pas de contenu de secours pour le contenu déjà visible. C'est bien le comportement attendu.
2536+
Imaginez que vous naviguiez au sein d'une page de profil utilisateur, et que quelque chose suspende. Si cette mise à jour est enrobée dans une Transition, elle ne déclenchera pas de contenu de secours pour le contenu déjà visible. C'est bien le comportement attendu.
25372537
25382538
En revanche, imaginez maintenant que vous naviguiez entre deux profils utilisateurs différents. Dans ce cas, afficher le contenu de secours aurait du sens. Par exemple, le fil des publications d'un utilisateur constitue un *contenu différent* de celui d'un autre utilisateur. En spécifiant une `key`, vous garantissez que React traitera les fils de publications d'utilisateurs différents comme des composants différents, et réinitialisera les périmètres Suspense lors de la navigation. Les routeurs compatibles Suspense sont censés le faire automatiquement.
25392539
@@ -2570,7 +2570,7 @@ Le HTML produit par le serveur incluera l'indicateur de chargement. Il sera ensu
25702570
25712571
Le remplacement d'une UI visible par un contenu de secours produit une expérience utilisateur désagréable. Ça peut arriver lorsqu'une mise à jour entraîne la suspension d'un composant, et que le périmètre Suspense le plus proche affiche déjà du contenu à l'utilisateur.
25722572
2573-
Pour empêcher ça, [indiquez que la mise à jour est non urgente grâce à `startTransition`](#preventing-already-revealed-content-from-hiding). Pendant la transition, React attendra jusqu'à ce qu'assez de données aient été chargées, afin d'éviter l'affichage d'un contenu de secours indésirable :
2573+
Pour empêcher ça, [indiquez que la mise à jour est non urgente grâce à `startTransition`](#preventing-already-revealed-content-from-hiding). Pendant la Transition, React attendra jusqu'à ce qu'assez de données aient été chargées, afin d'éviter l'affichage d'un contenu de secours indésirable :
25742574
25752575
```js {2-3,5}
25762576
function handleNextPageClick() {

src/content/reference/react/index.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ React-DOM comprend les fonctionnalités qui ne sont prises en charge que pour le
2929
* [Fonctions côté client](/reference/react-dom/client) - L'API dans `react-dom/client` vous permet d'effectuer le rendu de composants React côté client (dans le navigateur).
3030
* [Fonctions côté serveur](/reference/react-dom/server) - L'API dans `react-dom/server` vous permet d'effectuer le rendu de composants React côté serveur, vers du HTML.
3131

32+
## Les règles de React {/*rules-of-react*/}
33+
34+
React repose sur des idiomes — ou règles — visant à exprimer vos approches de façon facile à comprendre, et à même de produire des applications de grande qualité :
35+
36+
* [Les composants et les Hooks doivent être purs](/reference/rules/components-and-hooks-must-be-pure) – Cette pureté facilite la compréhension de votre code ainsi que son débogage, et permet à React d'optimiser automatiquement et correctement vos composants et Hooks.
37+
* [React appelle les composants et les Hooks](/reference/rules/react-calls-components-and-hooks) – React est responsable du rendu des composants et des Hooks de façon à optimiser l'expérience utilisateur.
38+
* [Les règles des Hooks](/reference/rules/rules-of-hooks) – Les Hooks reposent sur de simples fonctions JavaScript, mais ils représentent un type spécifique de logique UI réutilisable, et ne peuvent être appelés que dans des circonstances bien précises.
39+
3240
## API React historique {/*legacy-apis*/}
3341

3442
* [API React historique](/reference/react/legacy) - Ces fonctions sont présentes dans le module `react`, mais leur utilisation est découragée pour tout nouveau code.

0 commit comments

Comments
 (0)