Dans une application front, les différentes responsabilités suivent un schéma relativement simple :
- Les données ainsi que les traitements sont gérées par le Javascript
- L'interface est gérée via le HTML
Le Javascript va donc projeter des données dans l'interface HTML, alors que le HTML pourra appeler le Javascript lors des diverses intéractions de l'utilisateur avec la page.
- But de l'exercice
- Modéliser une liste de tâches dans le JS
- Mettre en place un conteneur dans le HTML
- Afficher les items du tableau dans le HTML
- Vérifier la bonne marche de notre application
- L'avantage du watch avec Wepback
- Ce que vous avez appris
Nous souhaitons afficher de façon dynamique une liste de tâches au sein de la page. En suivant le schéma explicité ci-dessus, nous comprenons :
- Le Javascript devra mettre en place les données (une liste de tâches sous la forme d'un tableau d'objets)
- Le Javascript devra aussi posséder un comportement qui permettra de projeter ces données dans le HTML
- Le HTML devra être capable d'accueillir cette projection dans un conteneur (un élément HTML)
Ici, on tentera vraiment de comprendre que l'on peut et comment on peut projeter du contenu dans l'interface HTML depuis le code Javascript
Créons tout d'abord la liste des tâches (en dur pour l'instant) au sein de notre fichier src/app.js
// src/app.js
// On créé ici un tableau TODO_ITEMS qui contient deux objets
const TODO_ITEMS = [
{ id: 1, text: "Faire les courses", done: false },
{ id: 2, text: "Aller chercher les enfants", done: true },
];
Modifions maintenant le fichier index.html afin qu'il contienne un élément qui accueillera la liste des tâches :
<main>
<h2>La liste des tâches</h2>
<!-- Le ul sera le conteneur pour nos tâches -->
<ul></ul>
</main>
Il nous faut maintenant matérialiser les comportements qui permettront d'afficher la liste des tâches :
// src/app.js
// On créé ici un tableau TODO_ITEMS qui contient deux objets
const TODO_ITEMS = [
{ id: 1, text: "Faire les courses", done: false },
{ id: 2, text: "Aller chercher les enfants", done: true },
];
// Nous créons une fonction qui servira à ajouter un élément dans le UL à partir d'un objet tâche
const addTodo = (item) => {
// On sélectionne le <ul>
const container = document.querySelector("ul");
// On ajoute du HTML à la fin du <ul>
container.insertAdjacentHTML(
"beforeend",
`
<li>
<label>
<input type="checkbox" id="todo-${item.id}" ${item.done ? "checked" : ""} />
${item.text}
</label>
</li>
`
);
};
// Pour chaque élément du tableau TODO_ITEMS, on appelle la fonction addTodo en fournissant
// l'item
TODO_ITEMS.forEach((item) => addTodo(item));
Encore une fois, on constate en actualisant notre navigateur que rien n'a changé : nous n'avons tout simplement pas "bundlé" notre code, et le fichier dist/app.js n'a donc pas pris en compte nos derniers changements. N'oublions donc pas de lancer la commande npm run dev
avant d'actualiser à nouveau le navigateur pour vérifier que tout fonctionne.
Vous pourriez éventuellement trouver lourdingue de devoir lancer à chaque modification de votre code la commande npm run dev
afin que Webpack fasse le bundling de l'application.
C'est pourquoi Webpack intègre une possibilité de "watching" (surveillance) de votre code source afin de se déclencher automatiquement à chaque changement.
// package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack --mode development",
+ "watch": "webpack --mode development --watch",
"serve": "live-server --entry-point=./index.html"
},
En lançant la commande npm run watch
vous verrez que Webpack va se lancer et ne plus vous rendre la main : il attend que des changements soient fait dans votre dossier src/ pour se relancer automatiquement.
- Le flux des données dans une application front : les données et comportements sont gérés dans le Javascript. Les données sont projetées par Javascript dans l'interface (HTML), alors que l'interface peut déclencher des traitements du Javascript ;
- Utiliser l'option
--watch
de Webpack afin de ne pas avoir à relancer sans cesse le bundling de nos fichiers sources
Revenir au sommaire ou Passer à la suite : Ajouter une tâche