📝 La logique d’une Todo List en JavaScript

📝 La logique d’une Todo List en JavaScript

ans framework, JavaScript pur, version qui ouvre le cerveau

Dans la vie d’un dĂ©veloppeur, certaines vĂ©ritĂ©s sont inĂ©vitables :

  • console.log est partout
  • Un jour, tu te disputeras avec undefined
  • Et

    👉 Tu feras au moins une fois une Todo List

Mais cet article n’est pas :
❌ une Todo “copier–coller”
❌ une fuite derriùre un framework
✅ un guide qui t’apprend vraiment comment JavaScript rĂ©flĂ©chit


🧠 1. Todo List = Petite application, grande leçon

Une Todo List paraĂźt simple, mais elle cache :

  • La rĂ©cupĂ©ration de donnĂ©es utilisateur
  • Le stockage des donnĂ©es en mĂ©moire (state)
  • La mise Ă  jour de l’écran (render)
  • La gestion des Ă©vĂ©nements (events)

En rĂ©alitĂ©, une Todo List, c’est :

« Voir le cƓur de JavaScript Ă  travers une petite application. »


đŸ§© 2. D’abord la logique : comment fonctionne une Todo List ?

Avant d’écrire du code, rĂ©flĂ©chissons 🧠

Une Todo List fait ceci :

1ïžâƒŁ L’utilisateur Ă©crit une tĂąche
2ïžâƒŁ Il clique sur « Add »
3ïžâƒŁ La tĂąche entre dans la liste
4ïžâƒŁ Il peut la marquer comme terminĂ©e
5ïžâƒŁ Il peut la supprimer

CÎté JavaScript, il y a cette boucle :

UTILISATEUR → ÉVÉNEMENT → STATE → RENDER → ÉCRAN

Si tu comprends ça, tu es déjà à mi-chemin.


đŸ§± 3. HTML : installer le dĂ©cor (ni trop, ni trop peu)

Le HTML n’est que le squelette.
Les dĂ©veloppeurs malins laissent le vrai travail Ă  JavaScript 😄

<input type="text" id="todoInput" placeholder="Write a task..." />
<button id="addBtn">Add</button>

<ul id="todoList"></ul>

🧠 Qu’est-ce qu’on a ici ?

  • input → l’endroit oĂč l’on Ă©crit la tĂąche
  • button → le bouton qui dĂ©clenche l’action
  • ul → la vitrine oĂč les tĂąches s’affichent

Quand le HTML est simple :

  • JavaScript respire
  • Le code est lisible
  • Le debug est plus facile

📩 4. Le concept de State : oĂč stocker les todos ?

C’est le point le plus critique đŸ”„

On ne stocke pas les todos dans le DOM,
on les stocke dans la mémoire de JavaScript.

const todos = [];

❓ Pourquoi un tableau (array) ?

  • OrdonnĂ©
  • Dynamique
  • Facile Ă  gĂ©rer

❓ Pourquoi const ?

  • Le tableau garde la mĂȘme rĂ©fĂ©rence
  • Impossible d’écrire par erreur todos = null
  • Code plus sĂ»r

📌 Rùgle d’or :
Le DOM est temporaire, le state est permanent.


🎣 5. RĂ©cupĂ©rer les Ă©lĂ©ments du DOM (les yeux et les oreilles de JS)

On dit Ă  JavaScript :

« Voilà les éléments avec lesquels on va parler. »

const input = document.getElementById("todoInput");
const button = document.getElementById("addBtn");
const list = document.getElementById("todoList");

Maintenant :

  • input.value → ce que l’utilisateur a Ă©crit
  • list → la maison des tĂąches

➕ 6. Ajouter une Todo : lĂ  oĂč l’action commence

Place à l’action 🎬

button.addEventListener("click", () => {
  const todoText = input.value.trim();

  if (todoText === "") return;

  todos.push({
    text: todoText,
    completed: false
  });

  input.value = "";
  renderTodos();
});

🧠 Explication amusante, ligne par ligne :

addEventListener("click")
➡ L’utilisateur clique
➡ JS : « Reçu ! »

input.value.trim()
➡ Supprime les espaces au dĂ©but et Ă  la fin
➡ Pas de todo vide

if (todoText === "") return;

➡ Tñche vide = poubelle
➡ UX sauvĂ© 🎉

todos.push({ ... })

➡ On stocke des objets, pas de simples strings
➡ Structure prĂȘte pour l’avenir

renderTodos()
➡ Ordre donnĂ© : « Mets Ă  jour l’écran ! »


🔁 7. La logique de rendu : tout redessiner (partie la plus importante)

La plus grosse erreur dans les Todo Lists :

« Tripoter le DOM élément par élément »

Nous, on ne fait pas ça 😎
On redessine tout.

function renderTodos() {
  list.innerHTML = "";

  todos.forEach((todo, index) => {
    const li = document.createElement("li");
    li.textContent = todo.text;

    if (todo.completed) {
      li.style.textDecoration = "line-through";
    }

    li.addEventListener("click", () => {
      toggleTodo(index);
    });

    const deleteBtn = document.createElement("button");
    deleteBtn.textContent = "❌";

    deleteBtn.addEventListener("click", (e) => {
      e.stopPropagation();
      deleteTodo(index);
    });

    li.appendChild(deleteBtn);
    list.appendChild(li);
  });
}

🧠 Que se passe-t-il ici ?

  • innerHTML = "" → on nettoie l’écran
  • forEach → on redessine chaque todo
  • index → on sait exactement laquelle on manipule
  • Click → complĂ©ter ou supprimer

📌 Cette logique est l’ancĂȘtre de :

  • React
  • Vue
  • Angular

❌ 8. Supprimer une Todo (simple et propre)

function deleteTodo(index) {
  todos.splice(index, 1);
  renderTodos();
}

🧠 Que fait splice ?

  • Commence Ă  index
  • Supprime 1 Ă©lĂ©ment
  • Met Ă  jour le tableau

Ensuite :
➡ re-render
➡ Ă©cran Ă  jour


✅ 9. ComplĂ©ter une Todo (UX qui monte d’un niveau)

function toggleTodo(index) {
  todos[index].completed = !todos[index].completed;
  renderTodos();
}

🧠 Logique trùs simple :

  • true → false
  • false → true

Mais gros effet :

  • Retour visuel immĂ©diat
  • Utilisateur content
  • Application « vivante »

💡 10. Conseils pro (or pur)

✔ Ne stocke jamais le state dans le DOM
✔ Fais du render le centre de tout
✔ Écris des fonctions courtes
✔ « Si quelque chose change → render »
✔ Apprends JavaScript avant les frameworks


🧠 11. Qu’as-tu vraiment appris avec ce projet ?

Cette Todo List t’a appris :

  • La manipulation du DOM
  • La gestion des Ă©vĂ©nements
  • La gestion du state
  • L’utilisation des tableaux et objets
  • La synchronisation UI ↔ donnĂ©es

Avec ça :

  • React devient plus facile
  • Ton niveau de debug augmente
  • Tu abandonnes les rĂ©flexes “junior”

🚀 Mot de la fin

CrĂ©er une Todo List sans framework, c’est :

  • pas difficile
  • extrĂȘmement formateur
  • vraiment valorisant

Et ça te fait dire :

« Je comprends vraiment JavaScript. »

Comments

No comments yet. Why don’t you start the discussion?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile ißaretlenmißlerdir