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/0/en/part0a.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -37,7 +37,7 @@ The course contains fourteen parts, the first of which is numbered 0 for consist
37
37
38
38
Proceeding from part <i>n</i> to part <i>n+1</i> is not sensible before enough know-how of the topics in part <i>n</i> has been achieved. In pedagogic terms, the course uses [Mastery Learning](https://en.wikipedia.org/wiki/Mastery_learning), and you are only intended to proceed to the next part after doing enough of the exercises of the previous part.
39
39
40
-
In parts 1-4 you are expected to do <i>at least</i> all of the exercises that are not marked with an asterisk(*). Exercises marked with an asterisk count towards your final grade, but skipping them does not prevent you from doing the compulsory exercises in the next parts. Parts 5- do not have asterisk marked exercises since there is no similar dependency on previous parts.
40
+
In parts 1-4 you are expected to do <i>at least</i> all of the exercises that are not marked with an asterisk(*). Exercises marked with an asterisk count towards your final grade, but skipping them does not prevent you from doing the compulsory exercises in the next parts. Parts 5-13 do not have asterisk marked exercises since there is no similar dependency on previous parts.
Copy file name to clipboardExpand all lines: src/content/0/fr/part0.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,6 @@ lang: fr
6
6
7
7
<divclass="intro">
8
8
9
-
Dans cette partie, nous allons nous familiariser avec les modalités pratiques de suivi du cours. Après cela, nous aurons un aperçu des bases du développement Web et parlerons également des progrès du développement d'applications Web au cours des dernières décennies.
9
+
Dans cette partie, nous allons nous familiariser avec les modalités pratiques de suivi du cours. Par la suite, nous aurons un aperçu des bases du développement Web et parlerons également des progrès dans le domaine du développement d'applications Web au cours des dernières décennies.
Copy file name to clipboardExpand all lines: src/content/0/fr/part0a.md
+41-5Lines changed: 41 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,10 +13,12 @@ Les autres sujets incluent le débogage des applications, la technologie des con
13
13
14
14
### Prérequis
15
15
16
-
Les participants doivent avoir de bonnes compétences en programmation, des connaissances de base en programmation Web et en bases de données, et maîtriser le système de gestion de versions Git. On attend également de vous que vous ayez de la persévérance et une capacité à résoudre des problèmes et à rechercher des informations de manière autonome.
16
+
On s'attend des participants qu'ils aient de bonnes compétences en programmation, des connaissances de base en programmation Web et en bases de données, et qu'ils maîtrisent le système de gestion de versions Git. On attend également de vous que vous ayez de la persévérance et une capacité à résoudre des problèmes et à rechercher des informations de manière autonome.
17
17
18
18
Une connaissance préalable de JavaScript ou d'autres sujets de cours n'est pas requise.
19
19
20
+
Quelle est la quantié d'experience en programmation nécessaire? Difficile à dire avec précision, néanmoins, on s'attend à un niveau de maîtrise suffisante avec <i>votre</i> language, qui équivaut approximativement à 100-200 heures de pratique.
21
+
20
22
### Matériel de cours
21
23
22
24
Le matériel de cours est destiné à être lu une partie à la fois et dans l'ordre.
@@ -29,7 +31,7 @@ Le matériel de cours est basé sur des exemples d'applications en expansion pro
29
31
30
32
### Suivre le cours
31
33
32
-
Le cours contient quatorze parties, dont la première est numérotée 0 par souci de cohérence avec les itérations passées. Une partie correspond à peu près à une semaine (15 à 20 heures en moyenne) d'études, mais la vitesse de réalisation du cours est flexible.
34
+
Le cours contient quatorze parties, dont la première est numérotée 0 par souci de cohérence avec les itérations passées. Une partie correspond environ à une semaine (15 à 20 heures en moyenne) d'études, mais la vitesse de réalisation du cours est flexible.
33
35
34
36
Passer de la partie <i>n</i> à la partie <i>n+1</i> n'est pas judicieux avant d'avoir acquis une connaissance suffisante des sujets de la partie <i>n</i>. En termes pédagogiques, le cours utilise [Mastery Learning](https://en.wikipedia.org/wiki/Mastery_learning), et vous n'êtes censé passer à la partie suivante qu'après avoir fait suffisamment d'exercices de la partie précédente.
35
37
@@ -44,7 +46,43 @@ Les statistiques de temps d'exécution des exercices peuvent être trouvées via
44
46
45
47
### Chaîne de cours dans Discord et Telegram
46
48
47
-
Vous pouvez discuter du cours et des sujets connexes dans notre groupe dédié sur <atarget='_blank'href='https://study.cs.helsinki.fi/discord/join/fullstack'>Discord</a> et sur <atarget='_blank'href='https://t.me/fullstackcourse'>Telegram</a>. Rejoignez la conversation !
49
+
Vous pouvez discuter du cours et des sujets connexes dans notre groupe dédié sur <atarget='_blank'href='https://study.cs.helsinki.fi/discord/join/fullstack'>Discord</a> et sur <atarget='_blank'href='https://t.me/fullstackcourse'>Telegram</a>.
50
+
51
+
Le serveur Discord possède une chaîne fullstack_general et d'autres chaînes spécifiques à chaque partie. Prenez note que <i>l'utilisation de la chaîne de clavardage principale n'est pas appropriée aux discussions dédiées au matériel du cours.</i>
52
+
53
+
Rejoignez la conversation !
54
+
55
+
### Comment recevoir de l'aide par Discord/Telegram
56
+
57
+
Lorsque vous demandez de l'aide pour un problème par Discord/Telegram, votre question se doit d'être aussi claire et informative que possible. Si votre question ressemble à ceci:
58
+
59
+
> <i>Ajouter une nouvelle personne ne fonctionne pas, pouvez vous m'aider?</i>
60
+
61
+
il est for probable que personne ne répondra. Le problème pourrait être <i>n'importe où</i>.
62
+
63
+
Une meilleure question pourrait être:
64
+
65
+
> <i> Dans l'exercice 2.15, lorsque j'essaie d'ajouter une nouvelle personne à l'application, le serveur répond à 403, bien que la demande me semble correcte.
66
+
>
67
+
> Le code ressemble à ceci
68
+
>
69
+
> ```js
70
+
>// la partie de code pertinente est collée ici
71
+
>// le code doit contenir plusieurs instructions console.log pour faciliter le débogage
72
+
>```
73
+
>
74
+
> Ce qui suit est imprimé sur la console
75
+
>
76
+
> ```bash
77
+
>// données imprimées sur la console
78
+
>```
79
+
>
80
+
> L'onglet réseau ressemble à ceci</i>
81
+
>
82
+
> [capture d'écran de la console réseau]
83
+
>
84
+
> Tout le code se trouve ici (un lien vers GitHub)
85
+
48
86
49
87
### Parties et complétion
50
88
@@ -70,8 +108,6 @@ Une fois que vous avez terminé suffisamment d'exercices pour obtenir une note d
70
108
71
109
Si vous souhaitez recevoir des crédits universitaires, vous devez réussir l'examen du cours. L'examen ne compte pas dans votre note finale, mais vous devez le réussir. Plus d'infos sur l'examen [ici](/fr/part0/informations_generales#lexamen-du-cours).
72
110
73
-
La dernière date possible pour passer l'examen est le 10 janvier 2023. **Notez que vous devez vous inscrire à l'examen au plus tard le 9 janvier 2023.**
74
-
75
111
Vous ne pouvez passer l'examen qu'après avoir soumis suffisamment d'exercices pour cinq crédits. En pratique, il n'est pas judicieux de passer l'examen immédiatement après avoir soumis le nombre critique d'exercices. L'examen est le même pour 5 à 14 crédits et ne compte pas dans votre note.
76
112
77
113
<i>Vous n'avez pas besoin d'assister à l'examen du cours ou de vous inscrire au cours Open University pour obtenir le certificat du cours.</i>
Copy file name to clipboardExpand all lines: src/content/1/en/part1a.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ lang: en
7
7
8
8
<divclass="content">
9
9
10
-
We will now start getting familiar with probably the most important topic of this course, namely the [React](https://reactjs.org/) library. Let's start by making a simple React application as well as getting to know the core concepts of React.
10
+
We will now start getting familiar with probably the most important topic of this course, namely the [React](https://react.dev/) library. Let's start by making a simple React application as well as getting to know the core concepts of React.
11
11
12
12
The easiest way to get started by far is by using a tool called [create-react-app](https://github.com/facebook/create-react-app). It is possible (but not necessary) to install <i>create-react-app</i> on your machine if the <i>npm</i> tool that was installed along with Node has a version number of at least <i>5.3</i>.
13
13
@@ -59,7 +59,7 @@ The files <i>App.css</i>, <i>App.test.js</i>, <i>index.css</i>, <i>logo.svg</i>,
59
59
60
60
### Component
61
61
62
-
The file <i>App.js</i> now defines a [React component](https://reactjs.org/docs/components-and-props.html) with the name <i>App</i>. The command on the final line of file <i>index.js</i>
62
+
The file <i>App.js</i> now defines a [React component](https://react.dev/learn/your-first-component) with the name <i>App</i>. The command on the final line of file <i>index.js</i>
@@ -189,7 +189,7 @@ Did you remember your promise to keep the console open? What was printed out the
189
189
190
190
### JSX
191
191
192
-
It seems like React components are returning HTML markup. However, this is not the case. The layout of React components is mostly written using [JSX](https://reactjs.org/docs/introducing-jsx.html). Although JSX looks like HTML, we are dealing with a way to write JavaScript. Under the hood, JSX returned by React components is compiled into JavaScript.
192
+
It seems like React components are returning HTML markup. However, this is not the case. The layout of React components is mostly written using [JSX](https://react.dev/learn/writing-markup-with-jsx). Although JSX looks like HTML, we are dealing with a way to write JavaScript. Under the hood, JSX returned by React components is compiled into JavaScript.
193
193
194
194
After compiling, our application looks like this:
195
195
@@ -277,7 +277,7 @@ Another strong convention is the idea of a <i>root component</i> called <i>App</
277
277
278
278
### props: passing data to components
279
279
280
-
It is possible to pass data to components using so-called [props](https://reactjs.org/docs/components-and-props.html).
280
+
It is possible to pass data to components using so-called [props](https://react.dev/learn/passing-props-to-a-component).
281
281
282
282
Let's modify the component <i>Hello</i> as follows:
283
283
@@ -415,7 +415,7 @@ const App = () => {
415
415
416
416
However, when defining the root component of the application this is not a particularly wise thing to do, and it makes the code look a bit ugly.
417
417
418
-
Because the root element is stipulated, we have "extra" div elements in the DOM tree. This can be avoided by using [fragments](https://reactjs.org/docs/fragments.html#short-syntax), i.e. by wrapping the elements to be returned by the component with an empty element:
418
+
Because the root element is stipulated, we have "extra" div elements in the DOM tree. This can be avoided by using [fragments](https://react.dev/reference/react/Fragment), i.e. by wrapping the elements to be returned by the component with an empty element:
Copy file name to clipboardExpand all lines: src/content/1/en/part1c.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -250,7 +250,7 @@ Making repeated calls to the _render_ method is not the recommended way to re-re
250
250
251
251
All of our components up till now have been simple in the sense that they have not contained any state that could change during the lifecycle of the component.
252
252
253
-
Next, let's add state to our application's <i>App</i> component with the help of React's [state hook](https://reactjs.org/docs/hooks-state.html).
253
+
Next, let's add state to our application's <i>App</i> component with the help of React's [state hook](https://react.dev/learn/state-a-components-memory).
254
254
255
255
We will change the application as follows. <i>index.js</i> goes back to
256
256
@@ -377,7 +377,7 @@ Let's change the application so that increasing the counter happens when a user
377
377
378
378
Button elements support so-called [mouse events](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent), of which [click](https://developer.mozilla.org/en-US/docs/Web/Events/click) is the most common event. The click event on a button can also be triggered with the keyboard or a touch screen despite the name <i>mouse event</i>.
379
379
380
-
In React, [registering an event handler function](https://reactjs.org/docs/handling-events.html) to the <i>click</i> event happens like this:
380
+
In React, [registering an event handler function](https://react.dev/learn/responding-to-events) to the <i>click</i> event happens like this:
381
381
382
382
```js
383
383
constApp= () => {
@@ -542,7 +542,7 @@ It's recommended to write React components that are small and reusable across th
542
542
543
543
Let's first implement a <i>Display</i> component that's responsible for displaying the value of the counter.
544
544
545
-
One best practice in React is to [lift the state up](https://reactjs.org/docs/lifting-state-up.html) in the component hierarchy. The documentation says:
545
+
One best practice in React is to [lift the state up](https://react.dev/learn/sharing-state-between-components) in the component hierarchy. The documentation says:
546
546
547
547
> <i>Often, several components need to reflect the same changing data. We recommend lifting the shared state up to their closest common ancestor.</i>
548
548
@@ -629,13 +629,13 @@ const App = () => {
629
629
630
630
Since we now have an easily reusable <i>Button</i> component, we've also implemented new functionality into our application by adding a button that can be used to decrement the counter.
631
631
632
-
The event handler is passed to the <i>Button</i> component through the _handleClick_ prop. The name of the prop itself is not that significant, but our naming choice wasn't completely random. React's own official [tutorial](https://reactjs.org/tutorial/tutorial.html) suggests this convention.
632
+
The event handler is passed to the <i>Button</i> component through the _handleClick_ prop. The name of the prop itself is not that significant, but our naming choice wasn't completely random. React's own official [tutorial](https://react.dev/learn/tutorial-tic-tac-toe) suggests this convention.
633
633
634
634
### Changes in state cause rerendering
635
635
636
636
Let's go over the main principles of how an application works once more.
637
637
638
-
When the application starts, the code in _App_ is executed. This code uses a [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook to create the application state, setting an initial value of the variable _counter_.
638
+
When the application starts, the code in _App_ is executed. This code uses a [useState](https://react.dev/reference/react/useState) hook to create the application state, setting an initial value of the variable _counter_.
639
639
This component contains the _Display_ component - which displays the counter's value, 0 - and three _Button_ components. The buttons all have event handlers, which are used to change the state of the counter.
640
640
641
641
When one of the buttons is clicked, the event handler is executed. The event handler changes the state of the _App_ component with the _setCounter_ function.
Copy file name to clipboardExpand all lines: src/content/1/en/part1d.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -160,7 +160,7 @@ The application appears to work. However, <i>it is forbidden in React to mutate
160
160
161
161
Storing all of the state in a single state object is a bad choice for this particular application; there's no apparent benefit and the resulting application is a lot more complex. In this case, storing the click counters into separate pieces of state is a far more suitable choice.
162
162
163
-
There are situations where it can be beneficial to store a piece of application state in a more complex data structure. [The official React documentation](https://reactjs.org/docs/hooks-faq.html#should-i-use-one-or-many-state-variables) contains some helpful guidance on the topic.
163
+
There are situations where it can be beneficial to store a piece of application state in a more complex data structure. [The official React documentation](https://react.dev/learn/choosing-the-state-structure) contains some helpful guidance on the topic.
164
164
165
165
### Handling arrays
166
166
@@ -317,7 +317,7 @@ Even though a new value was set for _left_ by calling _setLeft(left + 1)_, the o
317
317
setTotal(left + right)
318
318
```
319
319
320
-
The reason for this is that a state update in React happens [asynchronously](https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous), i.e. not immediately but "at some point" before the component is rendered again.
320
+
The reason for this is that a state update in React happens [asynchronously](https://react.dev/learn/queueing-a-series-of-state-updates), i.e. not immediately but "at some point" before the component is rendered again.
321
321
322
322
We can fix the app as follows:
323
323
@@ -391,7 +391,7 @@ And in all other cases, the component renders the clicking history:
391
391
392
392
The <i>History</i> component renders completely different React elements depending on the state of the application. This is called <i>conditional rendering</i>.
393
393
394
-
React also offers many other ways of doing [conditional rendering](https://reactjs.org/docs/conditional-rendering.html). We will take a closer look at this in [part 2](/en/part2).
394
+
React also offers many other ways of doing [conditional rendering](https://react.dev/learn/conditional-rendering). We will take a closer look at this in [part 2](/en/part2).
395
395
396
396
Let's make one last modification to our application by refactoring it to use the _Button_ component that we defined earlier on:
397
397
@@ -451,7 +451,7 @@ const App = () => {
451
451
452
452
### Old React
453
453
454
-
In this course, we use the [state hook](https://reactjs.org/docs/hooks-state.html) to add state to our React components, which is part of the newer versions of React and is available from version [16.8.0](https://www.npmjs.com/package/react/v/16.8.0) onwards. Before the addition of hooks, there was no way to add state to functional components. Components that required state had to be defined as [class](https://reactjs.org/docs/react-component.html) components, using the JavaScript class syntax.
454
+
In this course, we use the [state hook](https://react.dev/learn/state-a-components-memory) to add state to our React components, which is part of the newer versions of React and is available from version [16.8.0](https://www.npmjs.com/package/react/v/16.8.0) onwards. Before the addition of hooks, there was no way to add state to functional components. Components that required state had to be defined as [class](https://react.dev/reference/react/Component) components, using the JavaScript class syntax.
455
455
456
456
In this course, we have made the slightly radical decision to use hooks exclusively from day one, to ensure that we are learning the current and future variations of React. Even though functional components are the future of React, it is still important to learn the class syntax, as there are billions of lines of legacy React code that you might end up maintaining someday. The same applies to documentation and examples of React that you may stumble across on the internet.
457
457
@@ -1115,7 +1115,7 @@ The internet is full of React-related material. However, we use the new style of
1115
1115
1116
1116
You may find the following links useful:
1117
1117
1118
-
- The [official React documentation](https://reactjs.org/docs/hello-world.html) is worth checking out at some point, although most of it will become relevant only later on in the course. Also, everything related to class-based components is irrelevant to us;
1118
+
- The [official React documentation](https://react.dev/learn) is worth checking out at some point, although most of it will become relevant only later on in the course. Also, everything related to class-based components is irrelevant to us;
1119
1119
- Some courses on [Egghead.io](https://egghead.io) like [Start learning React](https://egghead.io/courses/start-learning-react) are of high quality, and the recently updated [Beginner's Guide to React](https://egghead.io/courses/the-beginner-s-guide-to-reactjs) is also relatively good; both courses introduce concepts that will also be introduced later on in this course. **NB** The first one uses class components but the latter uses the new functional ones.
0 commit comments