Vue.js continue d’évoluer rapidement, avec la version 3.x désormais bien implantée et des nouveautés en 2025 qui poussent les développeurs à adapter leurs méthodes. Pour construire des applications robustes, maintenables et performantes, il est essentiel de suivre certaines bonnes pratiques.

1. Utiliser la Composition API partout

Introduite avec Vue 3, la Composition API est devenue la norme en 2025. Elle permet une meilleure organisation du code, facilite la réutilisation et améliore la lisibilité.

Pourquoi la Composition API ?

  • Regroupement logique des fonctionnalités
  • Meilleure gestion des états et effets secondaires
  • Plus facile à tester

Exemple de composant avec Composition API

<script setup>
import { ref, computed } from 'vue';

const count = ref(0);

const increment = () => {
  count.value++;
};

const doubleCount = computed(() => count.value * 2);
</script>

<template>
  <div>
    <p>Count: {{ count }}</p>
    <p>Double: {{ doubleCount }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

2. Modulariser avec des composables

Pour ne pas répéter le même code dans plusieurs composants, il est recommandé d’extraire la logique réutilisable dans des composables.

Exemple de composable useCounter.js

import { ref, computed } from 'vue';

export function useCounter(initialValue = 0) {
  const count = ref(initialValue);
  
  const increment = () => {
    count.value++;
  };
  
  const doubleCount = computed(() => count.value * 2);
  
  return { count, increment, doubleCount };
}

Utilisation dans un composant

<script setup>
import { useCounter } from './composables/useCounter';

const { count, increment, doubleCount } = useCounter(5);
</script>

<template>
  <div>
    <p>Count: {{ count }}</p>
    <p>Double: {{ doubleCount }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

3. Typage strict avec TypeScript

Vue 3 a une intégration native avec TypeScript, ce qui est une pratique recommandée pour réduire les bugs et améliorer la lisibilité du code.

Exemple simple en TypeScript

<script setup lang="ts">
import { ref } from 'vue';

const message = ref<string>('Bonjour Vue 2025!');

function greet(name: string): string {
  return `Bonjour, ${name}`;
}
</script>

<template>
  <div>{{ greet(message) }}</div>
</template>

4. Gestion d’état centralisée avec Pinia

Pinia a remplacé Vuex comme solution officielle recommandée en 2025, grâce à sa simplicité et son intégration native avec la Composition API.

Exemple de store Pinia

// stores/counter.ts
import { defineStore } from 'pinia';

export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0
  }),
  actions: {
    increment() {
      this.count++;
    }
  },
  getters: {
    doubleCount: (state) => state.count * 2
  }
});

Utilisation dans un composant

<script setup lang="ts">
import { useCounterStore } from '@/stores/counter';

const counterStore = useCounterStore();
</script>

<template>
  <div>
    <p>Count: {{ counterStore.count }}</p>
    <p>Double: {{ counterStore.doubleCount }}</p>
    <button @click="counterStore.increment">Increment</button>
  </div>
</template>

5. Optimisation des performances

Lazy loading des composants

Utilisez l’import dynamique pour charger les composants à la demande et alléger le bundle initial.

<script setup>
import { defineAsyncComponent } from 'vue';

const AsyncComponent = defineAsyncComponent(() => import('./MyComponent.vue'));
</script>

<template>
  <Suspense>
    <AsyncComponent />
    <template #fallback>
      <div>Chargement...</div>
    </template>
  </Suspense>
</template>

Utiliser v-memo pour éviter les recalculs inutiles

Depuis Vue 3.3, v-memo permet de mémoriser le rendu d’un bloc si ses dépendances ne changent pas.

<template>
  <div v-memo="[someReactiveValue]">
    <!-- contenu coûteux à rendre -->
  </div>
</template>

6. Respecter l’accessibilité (a11y)

Ne négligez jamais l’accessibilité. Utilisez des attributs ARIA, des rôles sémantiques, et testez avec des lecteurs d’écran.

Exemple simple

<button aria-label="Fermer la fenêtre" @click="close">X</button>

7. Tests unitaires et E2E

  • Utilisez Vitest ou Jest pour les tests unitaires.
  • Cypress ou Playwright pour les tests end-to-end.

Exemple de test avec Vitest

import { describe, it, expect } from 'vitest';
import { useCounter } from './useCounter';

describe('useCounter', () => {
  it('initialise avec la valeur donnée', () => {
    const { count } = useCounter(10);
    expect(count.value).toBe(10);
  });

  it('incrémente correctement', () => {
    const { count, increment } = useCounter();
    increment();
    expect(count.value).toBe(1);
  });
});

8. Linter et formatage automatiques

Utilisez ESLint avec les règles Vue officielles et Prettier pour assurer un code propre et cohérent.


Conclusion

En 2025, Vue.js encourage des pratiques modernes pour produire des applications maintenables, performantes et robustes :

  • Préférez la Composition API à l’Options API.
  • Modulaire via des composables réutilisables.
  • Intégrez TypeScript pour plus de sécurité.
  • Gérez l’état global avec Pinia.
  • Optimisez le chargement et le rendu.
  • Ne négligez jamais l’accessibilité.
  • Automatisez les tests et le formatage.

Ces bonnes pratiques vous aideront à tirer le meilleur de Vue.js et à rester performant dans vos projets.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *