Skip to content

Commit b56f6ff

Browse files
committed
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
1 parent 4fff38d commit b56f6ff

File tree

1 file changed

+58
-41
lines changed

1 file changed

+58
-41
lines changed

src/content/1/fr/part1a.md

Lines changed: 58 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,14 @@ Ouvrez le navigateur et un éditeur de texte pour pouvoir afficher le code ainsi
4343
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 :
4444

4545
```js
46-
import React from 'react'
4746
import ReactDOM from 'react-dom/client'
4847

4948
import App from './App'
5049

5150
ReactDOM.createRoot(document.getElementById('root')).render(<App />)
5251
```
5352

54-
et le fichier <i>App.js</i> ressemble à ceci
53+
et le fichier <i>App.jsx</i> ressemble à ceci
5554

5655
```js
5756
const App = () => (
@@ -78,11 +77,11 @@ contrairement à Vite qui utilise
7877
```bash
7978
npm run dev
8079
```
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.
8281

8382
### Composant
8483

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>
8685

8786
```js
8887
ReactDOM.createRoot(document.getElementById('root')).render(<App />)
@@ -138,7 +137,7 @@ La fonction est alors affectée à une variable constante <i>App</i> :
138137
const App = ...
139138
```
140139

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.
142141

143142
Parce que la fonction se compose d'une seule expression, nous avons utilisé un raccourci, qui représente ce morceau de code :
144143

@@ -213,7 +212,7 @@ Vous souvenez-vous de votre promesse de garder la console ouverte ? Qu'y a-t-il
213212

214213
### JSX
215214

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.
217216

218217
Après compilation, notre application ressemble à ceci :
219218

@@ -303,7 +302,7 @@ Une autre forte convention est l'idée d'un composant racine appelé <i>App</i>
303302

304303
### props : transmission de données aux composants
305304

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).
307306

308307
Modifions le composant <i>Hello</i> comme suit
309308

@@ -378,30 +377,43 @@ Selon l'éditeur que vous utilisez, vous pouvez recevoir le message d'erreur sui
378377

379378
![Capture d'écran de l'erreur eslint](../../images/1/1-vite5.png)
380379

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 :
382-
383-
```js
384-
module.exports = {
385-
root: true,
386-
env: { browser: true, es2020: true },
387-
extends: [
388-
'eslint:recommended',
389-
'plugin:react/recommended',
390-
'plugin:react/jsx-runtime',
391-
'plugin:react-hooks/recommended',
392-
],
393-
ignorePatterns: ['dist', '.eslintrc.cjs'],
394-
parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
395-
settings: { react: { version: '18.2' } },
396-
plugins: ['react-refresh'],
397-
rules: {
398-
'react-refresh/only-export-components': [
399-
'warn',
400-
{ allowConstantExport: true },
401-
],
402-
'react/prop-types': 0 // highlight-line
403-
},
404-
}
380+
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+
export default [
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+
405417
```
406418

407419
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 = () => {
475487

476488
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.
477489

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 :
479491

480492
```js
481493
const App = () => {
@@ -624,23 +636,22 @@ Pour chaque application web d'une série d'exercices, il est recommandé de soum
624636
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.
625637

626638
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>
629641

630642
<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>
631643

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
633645

634646
```js
635-
import React from 'react'
636647
import ReactDOM from 'react-dom/client'
637648

638649
import App from './App'
639650

640651
ReactDOM.createRoot(document.getElementById('root')).render(<App />)
641652
```
642653

643-
et <i>App.js</i> pour correspondre à l'élément suivant
654+
et <i>App.jsx</i> pour correspondre à l'élément suivant
644655

645656
```js
646657
const App = () => {
@@ -672,11 +683,11 @@ const App = () => {
672683
export default App
673684
```
674685

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.
676687

677688
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.
678689

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>.
680691

681692
Le corps du composant <i>App</i> sera approximativement comme suit :
682693

@@ -694,7 +705,13 @@ const App = () => {
694705
}
695706
```
696707

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.
698715

699716
<h4>1.2 : courseinfo, étape 2</h4>
700717

@@ -714,4 +731,4 @@ const Content = ... {
714731

715732
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.
716733

717-
</div>
734+
</div>

0 commit comments

Comments
 (0)