Skip to content

Commit c3655b8

Browse files
author
Patrick Borowy
committed
i18n(french, [forms, getting-started, hooks])
1 parent 33a004f commit c3655b8

File tree

3 files changed

+614
-0
lines changed

3 files changed

+614
-0
lines changed

content/fr/guide/v10/forms.md

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
---
2+
name: Formulaires
3+
description: 'Comment créer un formulaire avec Preact qui fonctionnera partout'
4+
---
5+
6+
# Formulaires
7+
8+
Les formulaires dans Preact fonctionnent presque de la même manière qu'en HTML. Vous faites le rendu d'un controleur d'entrée et vous attachez une écoute d'événement (`event listener`) à celui-ci.
9+
10+
La principal différence est que dans la plupart des cas, la `value` n'est pas controlé par le noeud DOM, mais par Preact.
11+
12+
---
13+
14+
<toc></toc>
15+
16+
---
17+
18+
## Composants controllés et non controllés
19+
20+
(`Controlled & Uncontrolled Components`) Lorsque l'on parle de control d'un formulaire nous rencontrerons souvent les termes "Composant controllé" (`Controlled Component`) et "Composant non controllé" (`Uncontrolled Component`). Ces descriptions font référence à la manière dont le flux de donnée est géré. Le DOM a un flux bidirectionel parce que chaque control qu'il effectura gérera l'entrée de l'utilisateur lui même. Une simple entrée de texte mettera toujours à jour sa valeur lorsque l'utilisateur aura écrit dedans.
21+
22+
En contraste, un framework comme Preact a généralement un flux unidirectionnel. Le composant ne gère pas la valeur en soit même, mais quelque chose plus haut dans l'arbre des composants.
23+
24+
```jsx
25+
// Non controlé, parceque Preact n'attribue pas la valeur
26+
<input onInput={myEventHandler} />;
27+
28+
// Controlé, parceque Preact attribue la valeur
29+
<input value={someValue} onInput={myEventHandler} />;
30+
```
31+
32+
Généralement, vous devriez tout le temps essayer d'utiliser des composants _controllés_. Cependant, lorsque vous contruisez des composants autonome ou lorsque vous enrombez une librairie externe, cela peut toujours être util de simplement utiliser votre composant comme point d'entré pour une fonctionnalité non Preact. Dans ces cas, les composants non controllés sont bien adapté pour cette tache.
33+
34+
> note : définir la valeur comme `undefined` ou `null` renderont le composant non controllé
35+
36+
## Créer un simple formulaire
37+
38+
Créons un simple formulaire pour soumettre une entrée dans une liste de notes. Pour cela, nous créons un élément `<form>` et nous l'attachons à une gestion d'événement qui sera appelé lorsque le formulaire sera soumis. Nous faisons quelque chose de similaire qu'avec l'entrée de texte, mais nous sauvergardons les valeur dans la class elle même par nous même. Vous l'avez deviné, nous utilisons ici une entrée _controllé_. Dans cet exemple c'est très util car nous voulons afficher la valeur dans un autre élément.
39+
40+
```jsx
41+
class TodoForm extends Component {
42+
state = { value: '' };
43+
44+
onSubmit = e => {
45+
alert("Submitted a todo");
46+
e.preventDefault();
47+
}
48+
49+
onInput = e => {
50+
const { value } = e.target;
51+
this.setState({ value })
52+
}
53+
54+
render(_, { value }) {
55+
return (
56+
<form onSubmit={this.onSubmit}>
57+
<input type="text" value={value} onInput={this.onInput} />
58+
<p>You typed this value: {value}<p>
59+
<button type="submit">Submit</button>
60+
</form>
61+
);
62+
}
63+
}
64+
```
65+
66+
## Select Input
67+
68+
Un Element `<select>` est un peu plus impliqué, mais fonctionne d'une manière similaire à la validation de formulaire:
69+
70+
```jsx
71+
class MySelect extends Component {
72+
state = { value: '' };
73+
74+
onInput = e => {
75+
this.setState({ value: e.target.value });
76+
}
77+
78+
onSubmit = e => {
79+
alert("Submitted something");
80+
e.preventDefault();
81+
}
82+
83+
render(_, { value }) {
84+
return (
85+
<form onSubmit={this.onSubmit}>
86+
<select value={value} onInput={this.onInput}>
87+
<option value="A">A</option>
88+
<option value="B">B</option>
89+
<option value="C">C</option>
90+
</select>
91+
<button type="submit">Submit</button>
92+
</form>
93+
);
94+
}
95+
}
96+
```
97+
98+
## Cases à cocher & cases d'options
99+
100+
Les cases à cocher ou d'option (`<input type="checkbox|radio">`) peuvent initiallement être cause de confusion lorsque l'on crée des formulaires controlés. C'est parce que dans un environement non controllé, nous permetterions au navigateur de cocher une case pour nous, éouter sur des changements d'événements et réagir à la nouvelle valeur. Cependant, cette technique ne fait pas une bonne transition dans un monde ou ce composant change en fonction des changement d'état (`state`) et de paramètres (`props`).
101+
102+
> **Procédure:** Disons que nous souhaiterions écouter les changement d'une case à cocher qui serait activé par l'utilisateur. Dans notre gestion d'événement `input`, nous définissons un état (`state`) à la nouvelle valeur recu par la checkbox. Ceci déclanchera un rendu de notre composant, qui ré-assignera la valeur de la case à cocher à la valeur stocké dans l'état. C'est inutile car nous avons justement demandé au DOM une valeur et ensuite nous lui demandons de refaire un rendu avec la valeur reçu.
103+
104+
Alors, à la place d'écouter un événement `input` nous devrions plutôt écouter un événement `click`, qui sera lancé chaque fois que l'utilisateur cliquera sur la case à coché ou _un label associé_. Une case à cocher ne bascule qu'entre un Booleen `true` et `false`, alors nous nous ne ferons qu'inverser la valeur que nous avons dans l'état et nous déclanchant un rendu, et affichant la case à cocher que nous voulons.
105+
106+
### Exemple de case à cocher
107+
108+
```js
109+
class MyForm extends Component {
110+
toggle = e => {
111+
let checked = !this.state.checked;
112+
this.setState({ checked });
113+
};
114+
115+
render(_, { checked }) {
116+
return (
117+
<label>
118+
<input
119+
type="checkbox"
120+
checked={checked}
121+
onClick={this.toggle}
122+
/>
123+
</label>
124+
);
125+
}
126+
}
127+
```
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
---
2+
name: Premiers pas
3+
description: "Premiers pas avec Preact. Nous apprendrons comment mettre en place des outils (si nécessaire) et commencerons à écrire une application."
4+
---
5+
6+
# Premiers pas
7+
8+
Ce simple guide vous aide à commencer a développer des applications Preact. Il y a 3 moyens populaires de le faire.
9+
10+
Si vous commencez juste nous vous recommandons de commencer avec [preact-cli](#best-practices-powered-with-preact-cli).
11+
12+
---
13+
14+
<toc></toc>
15+
16+
---
17+
18+
## Sans aucun outil de construction
19+
20+
Preact a toujours été livré avec une solution prête à être utilisé dans le navigateur. Ce qui ne nécessite aucun outil de construction (build tools).
21+
22+
```js
23+
import { h, Component, render } from 'https://unpkg.com/preact';
24+
25+
// Créez votre application
26+
const app = h('div', null, 'Hello World!');
27+
28+
// Injectez votre application dans l'élément avec l'id `app`.
29+
// Faites en sorte que l'élément soit présent dans le dom ;)
30+
render(app, document.getElementById('app'));
31+
```
32+
33+
La seul différence est que vous ne pouvez pas utiliser JSX parce que JSX a besoin d'être transpilé. Nous avons une alternative dans la prochaine section.
34+
35+
### Alternatives à JSX
36+
37+
Écrire une application avec un `h` brut ou un appel `createElement` est bien moins amusant que d'écrire du JSX. JSX à l'avantage de ressembler à du HTML, qui rend la compréhension plus simple pour beaucoup de développeurs. Cela en revanche nécessite une étape pré-construite, alors nous vous recommandons vivement une alternative appelé [htm].
38+
39+
En un mot, [htm] peut être décrit comme: Une syntaxe JSX en plein Javascript sans avoir besoin de transpiler. Au lieu d'utiliser une syntaxe personnalisé, cela repose sur les littéraux de gabarits (tagged template strings) natif à javascript qui ont été ajouté à Javascript il y a un moment.
40+
41+
42+
```js
43+
import { h, Component, render } from 'https://unpkg.com/preact';
44+
import { html, Component, render } from 'https://unpkg.com/htm';
45+
46+
// Initialize htm with Preact
47+
const html = htm.bind(h);
48+
49+
const app = html`<div>Hello World!</div>`
50+
render(app, document.getElementById('app'));
51+
```
52+
53+
C'est une façon très populaire d'écrire des applications Preact et nous vous recommandons vivement de lire le [README][htm] de html si vous êtes intéressé par cette méthode.
54+
55+
## Meilleur pratique, avec `preact-cli`
56+
57+
Le projet `preact-cli` a crée la meilleur solution pour livrer des applications Preact à l’empaquetage optimisé pour les meilleurs configurations web. Il est construit avec des outils standard comme `webpack`, `babel` et `postcss`. Du par ca simplicité c'est le choix le plus populaire pour utiliser Preact parmis nos utilisateurs.
58+
59+
Comme le nom l'implique, `preact-cli` est une **c**commande en **l**igne de commande qui peut être utilisé sur le terminal de votre machine. Installez le globalement en lancant:
60+
```bash
61+
npm install -g preact-cli
62+
```
63+
64+
Après, vous aurez une nouvelle commande dans votre terminal appelé `preact`. Avec celle-ci vous pouvez créer une nouvelle application en utilisant la commande suivante:
65+
66+
```bash
67+
preact create default my-project
68+
```
69+
70+
La commande suivante récupère un modèle depuis `preactjs-template/default`, affiche quelques informations et génère un projet à `./mon-projet`.
71+
72+
> Astuce : Chaque dépot Github qui a un dossier `'template'` peut être utilisé comme un template en utilisant `preact create <nom-utilisateur>/<dépot> <nom-du-projet>`
73+
74+
### Premiers pas pour le développement
75+
76+
Nous somme prêt à commencer notre application. Pour lancer le serveur de développement, tapez la commande suivante dans le dossier d'un projet fraichement généré (`mon-projet`)
77+
78+
```bash
79+
# Go into the generated project folder
80+
cd my-project/
81+
82+
# Start the devserver
83+
npm run dev
84+
```
85+
86+
Lorsque le serveur sera lancé vous pourrez accéder à votre application à l'URL qui sera affiché dans la console. Maintenant vous être prêt à développer !
87+
88+
### Faire un empaquetage de production
89+
90+
Il y a un moments où vous voulez enfin deployer votre application. La commande `preact` livre un outil pratique `build` afin de générer un empaquetage compressé.
91+
92+
```bash
93+
npm run build
94+
```
95+
96+
Après la complétion, vous pouvez utiliser le dossier `build/` nouvellement crée qui peut être déployer directement sur le serveur.
97+
98+
> Pour une liste complète des commandes disponibles vérifiez la liste dans le [fichier README](https://github.com/preactjs/preact-cli#cli-options) de preact-cli.
99+
100+
## L'intégrer dans une application existante
101+
102+
Si vous avez déjà un processus de travail existant, c'est très possible que vous aillez déjà des outils d'empaquetage. Le choix le plus populaire est [webpack](https://webpack.js.org/), [rollup](https://rollupjs.org) ou [parcel](https://parceljs.org/). Preact fonctionne directement avec chacun d'eux. Aucun changement n'est nécéssaire !
103+
104+
### Mêttre en place JSX
105+
106+
Pour transpiler JSX, vous avez besoin d'un plugin babel qui converti votre code en Javascript valide. Celui que nous utilisons tous est [@babel/plugin-transform-react-jsx](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx). Une fois installé vous avez besoin de spécifier une fonction JSX qui devrait être utilisé:
107+
108+
```json
109+
{
110+
"plugins": [
111+
["@babel/plugin-transform-react-jsx", {
112+
"pragma": "h",
113+
"pragmaFrag": "Fragment",
114+
}]
115+
]
116+
}
117+
```
118+
119+
> [babeljs](https://babeljs.io/) est l'une des meilleurs documentation. Nous vous recommandons vivement de la vérifier pour vos questions concernant babel ou comment le configurer.
120+
121+
### Aliasing React à Preact
122+
123+
At some point you'll probably want to make use of the vast react ecosystem. Libraries and Components originally written for React work seamlessly with our compatibility layer. To make use of it we need to point all `react` and `react-dom` imports to Preact. This step is called aliasing.
124+
125+
#### Aliasing dans webpack
126+
127+
Pour alias un paquet dans webpack vous devez ajouter la section `resolve.alias` dans votre configuration.
128+
Suivant la configuration que vous utilisez ceci pourrait déjà être présente mais ayant les alias pour Preact manquant.
129+
130+
```js
131+
const config = {
132+
//...snip
133+
resolve: {
134+
alias: {
135+
'react': 'preact/compat',
136+
'react-dom/test-utils': 'preact/test-utils',
137+
'react-dom': 'preact/compat', // Doit être en dessous de test-utils
138+
},
139+
}
140+
```
141+
142+
#### Aliasing dans parcel
143+
144+
Parcel utilise le fichier standard `package.json` pour lire les configurations sous une clé `alias`.
145+
146+
147+
```json
148+
{
149+
"alias": {
150+
"react": "preact/compat",
151+
"react-dom/test-utils": "preact/test-utils",
152+
"react-dom": "preact/compat"
153+
},
154+
}
155+
```
156+
157+
#### Aliasing dans jest
158+
159+
Similaire aux empaqueteurs (bundlers), [jest](https://jestjs.io/) permet de réécrire le chemin d'un module. Cette syntaxe est un peut différente que, disons dans webpack, parceque celle-ci est basé sur des regex. Ajoutez ceci dans votre configuration jest:
160+
161+
```js
162+
{
163+
"moduleNameMapper": {
164+
"react": "preact/compat"
165+
"react-dom/test-utils": "preact/test-utils"
166+
"react-dom": "preact/compat"
167+
}
168+
}
169+
```
170+
171+
[htm]: https://github.com/developit/htm
172+

0 commit comments

Comments
 (0)