"}},{"@type":"Question","name":"Quelles sont les principales fonctionnalités d'Htmx?","acceptedAnswer":{"@type":"Answer","text":"Htmx offre des fonctionnalités telles que les requêtes AJAX, la mise à jour de contenu dynamique, le traitement des formulaires avec une meilleure performance, et bien plus encore sans avoir besoin de coder beaucoup de JavaScript."}}]}]
Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🔄
Debutant 25 min Htmx

Debuter avec Htmx

Debuter avec Htmx : Un Tutoriel Approfondi pour les Développeurs Débutants

Pourquoi Htmx ?

Contexte réel : pourquoi un dev a besoin de ca au quotidien

En tant que développeur web, vous avez probablement déjà vécu la frustration d'avoir besoin de rafraîchir une page complète pour voir des modifications apportées à une partie spécifique. C'est là que Htmx entre en jeu. Htmx est un petit framework JavaScript qui permet d'ajouter des interactions dynamiques et réactives à vos pages web avec une syntaxe HTML simple et intuitive.

Un cas d'utilisation concret en 2-3 phrases

Imaginez une application de gestion des tâches où vous pouvez ajouter, modifier ou supprimer des tâches sans rafraîchir la page. C'est exactement ce que Htmx peut faire avec une syntaxe HTML simple et efficace.

Prerequis

Liste à puces des connaissances nécessaires

  • Connaissance de base en HTML, CSS et JavaScript
  • Familiarité avec le navigateur Chrome ou Firefox pour les tests (pourraient être d'autres navigateurs également compatibles)

Outils à installer (versions)

Aucun outil spécifique n'est nécessaire pour utiliser Htmx. Vous pouvez simplement inclure la bibliothèque Htmx dans votre projet en ajoutant une balise <script> avec l'URL de la version la plus récente sur un CDN comme suivant :

<!-- Ajoutez cette ligne dans le head ou juste avant le body fermé de votre fichier HTML -->
<script src="https://unpkg.com/htmx.org@1.6.1"></script>

Concepts fondamentaux

1. hx-get, hx-post, hx-put, hx-delete : Effectuer des requêtes HTTP

Htmx permet d'effectuer des requêtes HTTP sans rafraîchir la page en utilisant les attributs spécifiques comme hx-get, hx-post, etc.

Exemple de code :

<button hx-get="/api/data">Rafraîchir les données</button>

<div id="data-container" hx-swap="innerHTML">
    <!-- Contenu dynamique qui sera remplacé -->
</div>

2. hx-target : Spécifier le cible de la réponse

L'attribut hx-target permet de spécifier quel élément du DOM doit être mis à jour par la réponse.

Exemple de code :

<button hx-get="/api/data" hx-target="#data-container">Rafraîchir les données</button>

<div id="data-container">
    <!-- Contenu dynamique qui sera remplacé -->
</div>

3. hx-swap : Spécifier la méthode de mise à jour

L'attribut hx-swap permet de spécifier comment le contenu doit être mis à jour. Les valeurs possibles incluent innerHTML, outerHTML, afterbegin, etc.

Exemple de code :

<button hx-get="/api/data" hx-target="#data-container" hx-swap="innerHTML">Rafraîchir les données</button>

<div id="data-container">
    <!-- Contenu dynamique qui sera remplacé -->
</div>

4. hx-trigger : Déclencher des actions en réponse à des événements

L'attribut hx-trigger permet de spécifier quel événement déclenchera l'action.

Exemple de code :

<input type="text" id="search-input" hx-get="/api/search?q=${value}" hx-target="#search-results" hx-swap="innerHTML" hx-trigger="keyup change">
<div id="search-results">
    <!-- Résultats de la recherche -->
</div>

Mise en pratique : projet fil rouge

Construisons UN mini-projet complet et réaliste (ex: un gestionnaire de tâches)

Nous allons créer un simple gestionnaire de tâches qui permet d'ajouter des tâches, de les marquer comme terminées et de les supprimer.

Structure du projet :

task-manager/
├── index.html
└── main.js

Étape 1 : Configurer le HTML

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Task Manager</title>
    <script src="https://unpkg.com/htmx.org@1.6.1"></script>
</head>
<body>

<h1>Gestionnaire de Tâches</h1>

<form hx-post="/api/add-task" hx-swap="outerHTML">
    <input type="text" name="task" placeholder="Ajoutez une tâche">
    <button type="submit">Ajouter</button>
</form>


<script src="main.js"></script>
</body>
</html>

Étape 2 : Ajouter le code JavaScript

// main.js
document.addEventListener("DOMContentLoaded", () => {
    fetch("/api/tasks")
        .then(response => response.json())
        .then(tasks => {
            const tasksList = document.getElementById('tasks-list');
            tasks.forEach(task => {
                tasksList.innerHTML += `
                    <li ${task.completed ? 'class="completed"' : ''}>
                        <span hx-get="/api/task/${task.id}" hx-swap="innerHTML">${task.text}</span>
                        <button hx-post="/api/mark-task-as-done" hx-include='"id":${task.id}' hx-swap="outerHTML">Terminer</button>
                        <button hx-post="/api/delete-task" hx-include='"id":${task.id}' hx-swap="outerHTML">Supprimer</button>
                    </li>
                `;
            });
        })
        .catch(error => console.error('Error:', error));
});

Étape 3 : Créer les routes API

Pour que le code ci-dessus fonctionne, vous aurez besoin d'une application serveur qui répond aux requêtes API. Voici un exemple simple en utilisant Node.js et Express :

// server.js
const express = require('express');
const app = express();
const bodyParser = require('body-parser');

app.use(bodyParser.json());

let tasks = [];

app.get('/api/tasks', (req, res) => {
    res.json(tasks);
});

app.post('/api/add-task', (req, res) => {
    const newTask = { id: Date.now(), text: req.body.task, completed: false };
    tasks.push(newTask);
    res.status(201).json(newTask);
});

app.get('/api/task/:id', (req, res) => {
    const task = tasks.find(t => t.id == req.params.id);
    if (!task) return res.status(404).send('Task not found');
    res.json(task);
});

app.post('/api/mark-task-as-done', (req, res) => {
    const taskId = parseInt(req.body.id);
    const task = tasks.find(t => t.id === taskId);
    if (!task) return res.status(404).send('Task not found');
    task.completed = true;
    res.json(task);
});

app.post('/api/delete-task', (req, res) => {
    const taskId = parseInt(req.body.id);
    tasks = tasks.filter(t => t.id !== taskId);
    res.status(204).send();
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

Étape 4 : Installer les dépendances et lancer le serveur

## Installez les dépendances (Node.js)
npm install express body-parser

## Lancez le serveur
node server.js

Erreurs frequentes et debugging

1. Erreur : "Uncaught ReferenceError: fetch is not defined"

Ce message d'erreur signifie que fetch n'est pas disponible dans votre environnement. Assurez-vous d'être dans un navigateur qui prend en charge fetch, comme Chrome ou Firefox.

// 🚫 Mauvais
fetch('/api/tasks').then(response => response.json());

// ✅ Correct
if ('fetch' in window) {
    fetch('/api/tasks').then(response => response.json());
} else {
    // Polyfill pour fetch
}

2. Erreur : "Uncaught SyntaxError: Unexpected token < in JSON at position 0"

Cette erreur signifie que la réponse de l'API n'est pas du JSON attendu. Vérifiez que votre endpoint API retourne bien des données JSON.

// 🚫 Mauvais
fetch('/api/tasks').then(response => response.json());

// ✅ Correct
fetch('/api/tasks')
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        return response.json();
    })
    .catch(error => console.error('Error:', error));

3. Erreur : "Uncaught SyntaxError: Unexpected token ' in JSON at position 1"

Cette erreur signifie que la réponse de l'API est vide ou n'est pas du JSON valide. Assurez-vous que votre endpoint API retourne bien des données.

// 🚫 Mauvais
fetch('/api/tasks').then(response => response.json());

// ✅ Correct
fetch('/api/tasks')
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        return response.text(); // Vérifiez le contenu de la réponse
    })
    .catch(error => console.error('Error:', error));

Pour aller plus loin

1. Utiliser des animations avec Htmx

Explorez comment ajouter des animations CSS pour rendre votre interface utilisateur plus fluide et agréable.

2. Gérer les erreurs et les messages d'erreur

Ajoutez des gestionnaires de messages d'erreur pour informer l'utilisateur en cas de problème lors des opérations.

<div id="message" hx-get="/api/message" hx-swap="innerHTML" hx-trigger="done"></div>

3. Utiliser Htmx avec React ou Vue.js

Combinez Htmx avec d'autres bibliothèques front-end comme React ou Vue.js pour une meilleure performance et fonctionnalité.

Défi pratique :

Créez un simple formulaire de contact qui envoie les données par email à l'aide d'un service API. Utilisez Htmx pour gérer la validation et l'affichage des messages de confirmation.


Ce tutoriel vous a donné une introduction approfondie à Htmx, une bibliothèque JavaScript simple et puissante pour ajouter des interactions dynamiques à vos pages web. En suivant les étapes et en pratiquant régulièrement, vous serez bientôt capable de créer des applications réactives sans avoir besoin de rafraîchir la page entière. N'oubliez pas d'examiner les exemples de code fournis et de les adapter à vos besoins spécifiques.

Besoin d'aide sur Htmx ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Qu'est-ce que Htmx?
Htmx est une bibliothèque JavaScript qui permet d'ajouter des fonctionnalités AJAX à vos pages Web en utilisant simplement l'attribut data-hx-* dans votre code HTML.
Comment installer Htmx sur mon projet?
Pour installer Htmx, vous devez inclure le fichier JavaScript de Htmx dans votre page HTML. Vous pouvez le faire en ajoutant la balise script suivante :
Quelles sont les principales fonctionnalités d'Htmx?
Htmx offre des fonctionnalités telles que les requêtes AJAX, la mise à jour de contenu dynamique, le traitement des formulaires avec une meilleure performance, et bien plus encore sans avoir besoin de coder beaucoup de JavaScript.
"}},{"@type":"Question","name":"Quelles sont les principales fonctionnalités d'Htmx?","acceptedAnswer":{"@type":"Answer","text":"Htmx offre des fonctionnalités telles que les requêtes AJAX, la mise à jour de contenu dynamique, le traitement des formulaires avec une meilleure performance, et bien plus encore sans avoir besoin de coder beaucoup de JavaScript."}}]}

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.