Skip to content

Introduction à Vue.js

Qu'est-ce que Vue.js ?

Vue.js est un framework JavaScript créé par Evan You en 2014. Après avoir travaillé chez Google sur AngularJS, il a voulu créer un outil plus simple et accessible.

C'est quoi un framework ?

Un framework est une boîte à outils qui fournit une structure et des fonctionnalités prêtes à l'emploi. Plutôt que de tout coder vous-même, vous utilisez les outils du framework pour aller plus vite.

Vue.js est un framework progressif : on peut l'utiliser pour ajouter un peu d'interactivité à une page existante, ou pour construire une application web complète.

Évolution de Vue.js

VersionAnnéeNom de codeNouveautés majeures
1.02015EvangelionPremière version stable
2.02016Ghost in the ShellVirtual DOM, rendu côté serveur
3.02020One PieceComposition API, performances accrues
3.52024-Améliorations TypeScript

Le saviez-vous ?

Les noms de code des versions de Vue.js sont des références à des animes japonais !

Pourquoi choisir Vue.js ?

Vue.js se distingue par trois qualités :

QualitéDescription
AccessibleBasé sur HTML, CSS et JavaScript — vous savez déjà presque tout !
ProgressifApprenez petit à petit, pas besoin de tout maîtriser d'un coup
PerformantLéger (~10 Ko) et optimisé pour être rapide

Pour ce cours

Nous avons choisi Vue.js car sa syntaxe ressemble au HTML/CSS/JS que vous connaissez déjà. Les concepts appris sont ensuite transférables à React ou Angular.

Vue.js vs React

Vue.js et React sont les deux frameworks JavaScript les plus populaires. Voici leurs principales différences :

CritèreVue.jsReact
SyntaxeTemplates HTML classiquesJSX (mélange HTML/JavaScript)
ApprentissageProgressif et douxPlus difficile au début
ÉcosystèmeCohérent (même équipe)Fragmenté (librairies externes)
CréateurCommunauté open sourceMeta (Facebook)

En résumé : Vue.js est plus accessible pour débuter, React est plus répandu en entreprise. Les deux sont d'excellents choix.

Le Virtual DOM

Vous connaissez le DOM (Document Object Model) : c'est la représentation de votre page HTML que JavaScript peut manipuler. Le problème ? Modifier le DOM est lent car le navigateur doit tout recalculer.

Vue.js utilise une astuce : le Virtual DOM. C'est une copie légère du DOM en JavaScript.

Comment ça marche :

  1. Vos données changent
  2. Vue met à jour le Virtual DOM (très rapide, c'est juste du JavaScript)
  3. Vue compare l'ancien et le nouveau Virtual DOM
  4. Seules les différences sont appliquées au vrai DOM
┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Données   │ ──▶ │ Virtual DOM │ ──▶ │  DOM réel   │
│             │     │  (compare)  │     │ (mise à jour│
│             │     │             │     │  minimale)  │
└─────────────┘     └─────────────┘     └─────────────┘

Résultat : Vue.js est très performant, même avec des interfaces complexes.

Vuetify : notre librairie de composants

Dans ce cours, nous utilisons Vuetify, une bibliothèque de composants visuels basée sur Material Design de Google.

Vuetify fournit des composants prêts à l'emploi : boutons, cartes, formulaires, menus, etc. Plus besoin de tout styliser vous-même !

Exemple : un bouton Vuetify

vue
<v-btn color="primary" prepend-icon="mdi-check">
  Valider
</v-btn>

v-btn.png

Avec une seule ligne, vous obtenez un bouton stylisé avec une icône. Sans Vuetify, il faudrait écrire le HTML, le CSS, gérer les états hover/focus...

Pourquoi Vuetify ?

  • Gain de temps — Composants prêts à l'emploi
  • Cohérent — Tous les composants suivent Material Design
  • Responsive — Adapté mobile par défaut
  • Documenté — Exemples pour chaque composant

Documentation : vuetifyjs.com

Les composants Vue (SFC)

C'est quoi un composant ?

Un composant est un bloc réutilisable de votre interface. Par exemple : un bouton, une carte, un menu, un formulaire...

En Vue.js, chaque composant est un fichier .vue appelé Single File Component (SFC). Il contient trois sections :

vue
<script setup>
// JavaScript : données et logique
import { ref } from 'vue'
const message = ref('Bonjour !')
</script>

<template>
  <!-- HTML : structure du composant -->
  <h1>{{ message }}</h1>
</template>

<style scoped>
/* CSS : styles du composant */
h1 {
  color: deeppink;
}
</style>
SectionContenu
<script setup>La logique JavaScript (données, fonctions)
<template>Le HTML du composant
<style scoped>Le CSS, isolé à ce composant uniquement

Pourquoi scoped ?

Le mot-clé scoped sur le style signifie que le CSS ne s'applique qu'à ce composant. Pas de conflit avec les autres composants !

Découper une application en composants

L'idée centrale de Vue.js est de diviser l'interface en petits blocs réutilisables.

Plutôt qu'un seul fichier HTML géant, on découpe la page :

components.png

Dans cet exemple :

  • Header — Logo et navigation (réutilisé sur toutes les pages)
  • Sidebar — Menu latéral
  • Content — Zone principale avec plusieurs Cards
  • Footer — Pied de page

Chaque bloc = un fichier .vue indépendant.

AvantageExplication
RéutilisationUne Card utilisée 10 fois = 1 seul fichier à maintenir
MaintenanceModifier le header ? Un seul fichier à changer
ClartéChaque composant a une responsabilité précise

Penser en composants

Quand vous concevez une interface, demandez-vous : "Quels éléments se répètent ?" Ce sont vos futurs composants.

La réactivité : ref et reactive

En JavaScript classique, si vous modifiez une variable, l'affichage ne se met pas à jour automatiquement. En Vue.js, grâce à la réactivité, l'affichage se met à jour tout seul !

Pour rendre une donnée réactive, on utilise ref() :

vue
<script setup>
import { ref } from 'vue'

const compteur = ref(0)

function incrementer() {
  compteur.value++  // .value pour accéder à la valeur
}
</script>

<template>
  <p>Compteur : {{ compteur }}</p>
  <button @click="incrementer">+1</button>
</template>

Comment ça marche ?

  1. ref(0) crée une variable réactive initialisée à 0
  2. Dans le script, on accède à la valeur avec .value
  3. Dans le template, Vue affiche automatiquement la valeur (sans .value)
  4. Quand la valeur change, l'affichage se met à jour automatiquement

Attention

Il faut importer ref depuis 'vue' au début du script !

ref vs reactive

Il existe aussi reactive() pour les objets :

javascript
import { ref, reactive } from 'vue'

// ref : pour les valeurs simples
const age = ref(25)
age.value = 26  // .value obligatoire

// reactive : pour les objets
const utilisateur = reactive({ nom: 'Alice', age: 25 })
utilisateur.age = 26  // pas de .value
Type de donnéeUtiliserAccès
String, Number, Booleanref().value dans le script
Objet, Tableaureactive()Direct (pas de .value)

Conseil pour débuter

Utilisez ref() pour tout au début. C'est plus simple et ça fonctionne dans tous les cas !

Ressources

Documentation officielle

Outils

Aide-mémoire

Pour aller plus loin

Cette section présente des concepts avancés que vous découvrirez progressivement.

L'écosystème Vue.js

Vue.js propose des outils complémentaires maintenus par la même équipe :

OutilUsage
Vue RouterNavigation entre pages
PiniaPartager des données entre composants
NuxtFramework complet (SEO, serveur, etc.)
ViteOutil de build ultra-rapide

Méthodes de rendu

Vue.js supporte plusieurs façons de générer les pages :

MéthodeDescriptionSEO
CSRLe navigateur génère la page (ce cours)
SSRLe serveur génère la page
SSGPages pré-générées au build

Pour ce cours, nous utilisons le CSR (Client-Side Rendering), la méthode la plus simple.

Alternatives à Vuetify

D'autres librairies UI existent pour Vue.js :

LibrairieStyle
QuasarMaterial Design
PrimeVuePropre
Nuxt UITailwind CSS

Documentation pour les cours de développement web