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
Update configuration and documentation in part1a.md
- Remove unnecessary 'import React from react' due to new JSX transform in React 17+
- Update filenames from .js (CRA) to .jsx (Vite default structure)
- Update ESLint config references from .eslintrc.cjs to eslint.config.js (Vite auto-generated)
- Update ESLint rules section: change 'react/prop-types' value from 0 to ['off'] for better readability
- Update React documentation links from legacy domain to react.dev
- Update warning message after exercise 1.1
Copy file name to clipboardExpand all lines: src/content/1/fr/part1a.md
+58-41Lines changed: 58 additions & 41 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -43,15 +43,14 @@ Ouvrez le navigateur et un éditeur de texte pour pouvoir afficher le code ainsi
43
43
Le code de l'application se trouve dans le dossier <i>src</i>. Simplifions le code par défaut de telle sorte que le contenu du fichier <i>main.jsx</i> ressemble à ceci :
@@ -78,11 +77,11 @@ contrairement à Vite qui utilise
78
77
```bash
79
78
npm run dev
80
79
```
81
-
Le cours est actuellement (11 août 2023) en cours de mise à jour pour utiliser Vite. Certaines marques peuvent toujours utiliser la base d'application créée avec create-react-app.
80
+
Le cours est actuellement (15 novembre 2024) en cours de mise à jour pour utiliser Vite. Certaines marques peuvent toujours utiliser la base d'application créée avec create-react-app.
82
81
83
82
### Composant
84
83
85
-
Le fichier <i>App.js</i> définit maintenant un [composant React](https://reactjs.org/docs/components-and-props.html) avec le nom <i>App</i>. La commande sur la dernière ligne du fichier <i>index.js</i>
84
+
Le fichier <i>App.jsx</i> définit maintenant un [composant React](https://react.dev/learn/your-first-component) avec le nom <i>App</i>. La commande sur la dernière ligne du fichier <i>main.jsx</i>
@@ -138,7 +137,7 @@ La fonction est alors affectée à une variable constante <i>App</i> :
138
137
constApp=...
139
138
```
140
139
141
-
Il existe plusieurs façons de définir des fonctions en JavaScript. Ici, nous utiliserons les [fonctions fléchées](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), qui sont décrites dans une version plus récente de JavaScript connue sous le nom de [ECMAScript 6 ](http://es6-features.org/#Constants), également appelé ES6.
140
+
Il existe plusieurs façons de définir des fonctions en JavaScript. Ici, nous utiliserons les [fonctions fléchées](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), qui sont décrites dans une version plus récente de JavaScript connue sous le nom de [ECMAScript 6 ](https://262.ecma-international.org/6.0/#sec-built-in-function), également appelé ES6.
142
141
143
142
Parce que la fonction se compose d'une seule expression, nous avons utilisé un raccourci, qui représente ce morceau de code :
144
143
@@ -213,7 +212,7 @@ Vous souvenez-vous de votre promesse de garder la console ouverte ? Qu'y a-t-il
213
212
214
213
### JSX
215
214
216
-
Il semble que les composants React renvoient le balisage HTML. Cependant, ce n'est pas le cas. La disposition des composants React est principalement écrite à l'aide de [JSX](https://reactjs.org/docs/introducing-jsx.html). Bien que JSX ressemble à du HTML, nous avons en fait affaire à un moyen d'écrire du JavaScript. Sous le capot, le JSX renvoyé par les composants React est compilé en JavaScript.
215
+
Il semble que les composants React renvoient le balisage HTML. Cependant, ce n'est pas le cas. La disposition des composants React est principalement écrite à l'aide de [JSX](https://react.dev/learn/writing-markup-with-jsx). Bien que JSX ressemble à du HTML, nous avons en fait affaire à un moyen d'écrire du JavaScript. Sous le capot, le JSX renvoyé par les composants React est compilé en JavaScript.
217
216
218
217
Après compilation, notre application ressemble à ceci :
219
218
@@ -303,7 +302,7 @@ Une autre forte convention est l'idée d'un composant racine appelé <i>App</i>
303
302
304
303
### props : transmission de données aux composants
305
304
306
-
Il est possible de transmettre des données aux composants à l'aide de ce qu'on appelle [props](https://reactjs.org/docs/components-and-props.html).
305
+
Il est possible de transmettre des données aux composants à l'aide de ce qu'on appelle [props](https://react.dev/learn/passing-props-to-a-component).
307
306
308
307
Modifions le composant <i>Hello</i> comme suit
309
308
@@ -378,30 +377,43 @@ Selon l'éditeur que vous utilisez, vous pouvez recevoir le message d'erreur sui
378
377
379
378

380
379
381
-
Il ne s'agit pas réellement d'une erreur, mais d'un avertissement généré par l'outil [ESLint](https://eslint.org/). Vous pouvez supprimer l'avertissement [react/prop-types](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prop-types.md) en ajoutant à votre fichier <i>.eslintrc .cjs</i> la ligne suivante :
Il ne s'agit pas réellement d'une erreur, mais d'un avertissement généré par l'outil [ESLint](https://eslint.org/). Vous pouvez supprimer l'avertissement [react/prop-types](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prop-types.md) en ajoutant à votre fichier <i>eslint.config.js</i> la ligne suivante :
381
+
382
+
```js
383
+
exportdefault [
384
+
{ ignores: ['dist'] },
385
+
{
386
+
files: ['**/*.{js,jsx}'],
387
+
languageOptions: {
388
+
ecmaVersion:2020,
389
+
globals:globals.browser,
390
+
parserOptions: {
391
+
ecmaVersion:'latest',
392
+
ecmaFeatures: { jsx:true },
393
+
sourceType:'module',
394
+
},
395
+
},
396
+
settings: { react: { version:'18.3' } },
397
+
plugins: {
398
+
react,
399
+
'react-hooks': reactHooks,
400
+
'react-refresh': reactRefresh,
401
+
},
402
+
rules: {
403
+
...js.configs.recommended.rules,
404
+
...react.configs.recommended.rules,
405
+
...react.configs['jsx-runtime'].rules,
406
+
...reactHooks.configs.recommended.rules,
407
+
'react/prop-types': ['off'], // highlight-line
408
+
'react/jsx-no-target-blank':'off',
409
+
'react-refresh/only-export-components': [
410
+
'warn',
411
+
{ allowConstantExport:true },
412
+
],
413
+
},
414
+
},
415
+
]
416
+
405
417
```
406
418
407
419
Nous en apprendrons davantage sur ESLint en détail dans [la partie 3](/osa3/validointi_ja_es_lint#lint).
@@ -475,7 +487,7 @@ const App = () => {
475
487
476
488
Cependant, lors de la définition du composant racine de l'application, ce n'est pas une chose particulièrement judicieuse à faire, et cela rend le code un peu moche.
477
489
478
-
Parce que l'élément racine est stipulé, nous avons des éléments div "supplémentaires" dans l'arbre DOM. Cela peut être évité en utilisant des [fragments](https://reactjs.org/docs/fragments.html#short-syntax), c'est-à-dire en enveloppant les éléments à renvoyer par le composant avec un élément vide :
490
+
Parce que l'élément racine est stipulé, nous avons des éléments div "supplémentaires" dans l'arbre DOM. Cela peut être évité en utilisant des [fragments](https://react.dev/reference/react/Fragment), c'est-à-dire en enveloppant les éléments à renvoyer par le composant avec un élément vide :
479
491
480
492
```js
481
493
constApp= () => {
@@ -624,23 +636,22 @@ Pour chaque application web d'une série d'exercices, il est recommandé de soum
624
636
Les exercices sont soumis **une partie à la fois**. Lorsque vous avez soumis les exercices d'une partie du cours, vous ne pouvez plus soumettre d'exercices non terminés pour la même partie.
625
637
626
638
Notez que dans cette partie, il y a plus d'exercices que ceux trouvés ci-dessous. <i>Ne soumettez pas votre travail</i> tant que vous n'avez pas terminé tous les exercices que vous souhaitez soumettre pour la partie correspondante.
627
-
628
-
<h4>1.1 : courseinfo, étape 1</h4>
639
+
640
+
<h4>1.1 : courseinfo, étape 1</h4>
629
641
630
642
<i>L'application sur laquelle nous allons commencer à travailler dans cet exercice sera développée plus en détail dans quelques-uns des exercices suivants. Dans cette série d'exercices et d'autres à venir dans ce cours, il suffit de soumettre uniquement l'état final de l'application. Si vous le souhaitez, vous pouvez également créer un commit pour chaque exercice de la série, mais cela est facultatif.</i>
631
643
632
-
Utilisez create-react-app pour initialiser une nouvelle application. Modifiez <i>index.js</i> pour qu'il corresponde à ce qui suit
644
+
Utilisez Vite pour initialiser une nouvelle application. Modifiez <i>main.jsx</i> pour qu'il corresponde à ce qui suit
et <i>App.js</i> pour correspondre à l'élément suivant
654
+
et <i>App.jsx</i> pour correspondre à l'élément suivant
644
655
645
656
```js
646
657
constApp= () => {
@@ -672,11 +683,11 @@ const App = () => {
672
683
exportdefaultApp
673
684
```
674
685
675
-
et supprimer les fichiers supplémentaires (App.css, App.test.js, index.css, logo.svg, setupTests.js, reportWebVitals.js).
686
+
et supprimer les fichiers supplémentaires App.css et index.css, ainsi que le répertoire assets.
676
687
677
688
Malheureusement, toute l'application se trouve dans le même composant. Refactorisez le code afin qu'il se compose de trois nouveaux composants : <i>Header</i>, <i>Content</i> et <i>Total</i>. Toutes les données résident toujours dans le composant <i>App</i>, qui transmet les données nécessaires à chaque composant à l'aide des <i>props</i>. <i>Header</i> se charge de restituer le nom du cours, <i>Content</i> restitue les parties et leur nombre d'exercices et <i>Total</i> restitue le nombre total d'exercices.
678
689
679
-
Définissez les nouveaux composants dans le fichier <i>App.js</i>.
690
+
Définissez les nouveaux composants dans le fichier <i>App.jsx</i>.
680
691
681
692
Le corps du composant <i>App</i> sera approximativement comme suit :
682
693
@@ -694,7 +705,13 @@ const App = () => {
694
705
}
695
706
```
696
707
697
-
**ATTENTION** create-react-app transforme automatiquement le projet en référentiel git, sauf si l'application est créée dans un référentiel déjà existant. Très probablement, vous **ne voulez pas** que le projet devienne un référentiel, alors exécutez la commande _rm -rf .git_ à la racine du projet.
708
+
**ATTENTION** N'essayez pas de programmer tous les composants simultanément, car cela risque presque certainement de faire échouer l'ensemble de l'application. Procédez par petites étapes : commencez par créer par exemple le composant <i>Header</i> et ce n'est que lorsque vous êtes sûr qu'il fonctionne que vous pouvez passer au composant suivant.
709
+
710
+
Une progression prudente et progressive peut sembler lente, mais c'est en réalité <i>de loin la façon la plus rapide</i> de progresser. Le célèbre développeur Robert "Uncle Bob" Martin a déclaré :
711
+
712
+
> <i>"The only way to go fast, is to go well"</i>
713
+
714
+
c'est-à-dire que selon Martin, une progression minutieuse par petites étapes est même la seule façon d'être rapide.
698
715
699
716
<h4>1.2 : courseinfo, étape 2</h4>
700
717
@@ -714,4 +731,4 @@ const Content = ... {
714
731
715
732
Notre application transmet des informations de manière assez primitive pour le moment, car elle est basée sur des variables individuelles. Cette situation va bientôt s'améliorer.
0 commit comments