Vue 3 a introduit la Composition API comme alternative à l'Options API traditionnelle. Cette nouvelle approche apporte flexibilité, meilleure organisation du code et réutilisabilité accrue pour les projets vue complexes. Elle n'est pas un remplacement forcé mais une option puissante à connaître.
Pourquoi la Composition API ?
L'Options API organise le code par type (data, methods, computed, watch). Pour les composants simples, c'est parfait. Mais pour des composants complexes gérant plusieurs fonctionnalités distinctes, le code devient difficile à suivre car la logique liée à une même fonctionnalité est dispersée dans différentes sections.
La Composition API permet de regrouper la logique par fonctionnalité, facilitant l'extraction en composables réutilisables. Le TypeScript support est aussi nettement amélioré.
Le bloc setup()
Tout commence dans setup(), le point d'entrée de la Composition API. Il s'exécute avant la création du composant et retourne les éléments exposés au template :
export default {
setup() {
const count = ref(0);
const increment = () => count.value++;
return { count, increment };
}
}
Avec la syntaxe (recommandée), tout ce qui est déclaré est automatiquement exposé au template, sans return explicite.
ref() et reactive() : la réactivité
ref() crée une valeur réactive pour les primitives (string, number, boolean). On accède à sa valeur via .value en JavaScript, mais directement dans le template. reactive() crée un objet réactif profond :
const count = ref(0);
const state = reactive({ name: '', age: 0 });
count.value++;
state.name = 'Alice';
Préférez ref() pour la cohérence : il fonctionne pour les primitives et les objets, et son comportement est plus prévisible lors des destructurations.
computed() et watch()
computed() crée une propriété calculée mise en cache :
const fullName = computed(() => `${firstName.value} ${lastName.value}`);
watch() réagit aux changements d'une source réactive :
watch(count, (newVal, oldVal) => {
console.log(`Changé de ${oldVal} à ${newVal}`);
});
watchEffect() est une variante qui collecte automatiquement ses dépendances en s'exécutant immédiatement.
Les composables : réutiliser la logique
Les composables sont des fonctions qui encapsulent et réutilisent de la logique avec état, l'équivalent des hooks React. Par convention, leur nom commence par use :
// composables/useCounter.js
export function useCounter(initial = 0) {
const count = ref(initial);
const increment = () => count.value++;
const reset = () => count.value = initial;
return { count, increment, reset };
}
Ce composable peut être utilisé dans n'importe quel composant vue. C'est la grande force de la Composition API.
Cycle de vie dans setup()
Les hooks de cycle de vie ont leurs équivalents dans setup() : onMounted(), onUpdated(), onUnmounted(). Ils acceptent une callback directement :
onMounted(() => {
console.log('Composant monté');
fetchData();
});
onUnmounted(() => {
clearInterval(timer);
});
Migration depuis l'Options API
La migration n'est pas obligatoire. Les deux APIs coexistent dans vue 3, et vous pouvez même les mélanger dans un même projet. Commencez par migrer les nouveaux composants complexes, et laissez les composants simples en Options API. Consultez le guide officiel Vue 3 pour une référence complète.
Conclusion
La Composition API de vue 3 apporte une organisation du code supérieure pour les projets complexes. Maîtrisez setup(), ref(), reactive(), computed et les composables : vous gagnerez en productivité et votre code sera bien plus maintenable. La courbe d'apprentissage est douce, surtout si vous connaissez déjà React hooks.
Vue 3 avec la Composition API facilite la réutilisation de la logique entre composants via les Composables. Pour les applications d'envergure, Pinia remplace Vuex avec une API intuitive et un typage TypeScript natif. Nuxt 3 apporte le SSR, SSG et file-based routing avec une expérience développeur exceptionnelle. Les Teleports résolvent élégamment les problèmes de portails (modales, toasts) et gère les composants async avec états de chargement natifs. Vue DevTools 6 offre un débogage en profondeur des composants et de l'état Pinia. La documentation Vue 3 est parmi les plus pédagogiques du web, avec des exemples pratiques pour chaque option de l'API Composition disponible.