Vuejs fondamentaux
Thème :
Junior
2 vues ·36/36 leçons📚 Exercices Pratiques pour le Plan d’Apprentissage Vue.js 3
PHASE 1 : FONDAMENTAUX
Module 1 : Introduction Ă Vue.js
- Recherchez et listez 5 entreprises célèbres utilisant Vue.js dans leur stack technique avec une brève explication de leur utilisation.
- Créez une matrice comparative détaillant les avantages et inconvénients de Vue.js par rapport à React et Angular (au moins 5 critères).
- Explorez la documentation officielle de Vue.js et rédigez un résumé des 5 principales différences entre Vue 2 et Vue 3.
- Identifiez 3 types d’applications web où Vue.js serait particulièrement adapté et expliquez pourquoi.
- Recherchez et présentez 3 frameworks/utilitaires complémentaires à Vue.js (par exemple pour le routage, la gestion d’état, etc.).
- Créez un tableau comparatif des temps de chargement d’une application simple en Vue 3 vs Vue 2 avec des mesures concrètes.
- Identifiez 5 nouvelles fonctionnalités de Vue 3 qui améliorent significativement l’expérience de développement et expliquez leur impact.
Module 2 : Environnement de développement
- Créez un projet Vue.js simple en utilisant uniquement le CDN et comparez la structure avec un projet créé avec Vite.
- Initialisez un projet avec Vite en activant toutes les options (TypeScript, Vue Router, Pinia, etc.) et explorez la structure du projet.
- Analysez et expliquez le rĂ´le de chaque fichier de configuration important (package.json, vite.config.js, tsconfig.json).
- Configurez un projet Vue.js avec TypeScript et documentez les changements dans la structure et le workflow de développement.
- Comparez les temps de build et de démarrage entre un projet configuré avec Vite vs un projet configuré avec Webpack.
- Configurez ESLint et Prettier dans un projet Vue.js et créez un guide d’utilisation pour votre équipe.
- Créez une liste des 5 extensions VS Code les plus utiles pour le développement Vue.js avec une explication de leur utilité.
Module 3 : Première application
- Créez une application Vue.js simple avec un compteur utilisant
refet ajoutez des boutons pour incrémenter, décrémenter et réinitialiser. - Recréez la même application en utilisant
reactiveau lieu derefet comparez les deux approches. - Ajoutez un affichage indiquant combien de fois le compteur a été modifié (incrémenté ou décrémenté).
- Implémentez un système de sauvegarde temporaire du compteur dans le localStorage.
- Ajoutez un bouton “Undo” qui permet de revenir à la valeur précédente du compteur.
- Créez une version “thématique” de l’application où la couleur change selon la valeur du compteur.
- Ajoutez un système de notification qui s’affiche lorsque le compteur atteint un seuil spécifique.
Module 4 : Structure projet
- Configurez un projet Vue.js avec les extensions VS Code recommandées et documentez votre configuration.
- Créez un système de snippets personnalisés pour les composants Vue.js (SFC) avec les structures de base.
- Configurez votre projet pour utiliser les composants auto-importés et testez son fonctionnement.
- Créez un template personnalisé pour les nouveaux composants Vue.js avec des commentaires et une structure de base.
- Mettez en place un système de documentation intégré au projet avec des commentaires JSDoc/TypeDoc.
- Configurez votre projet pour utiliser un pré-processeur CSS (SCSS/Sass) et créez un exemple d’utilisation.
- Créez un système de gestion des variables d’environnement pour votre projet Vue.js.
Module 5 : Templates Vue
- Créez une application affichant un message de bienvenue personnalisé avec interpolation et des données utilisateur.
- Créez un bouton dont la couleur, taille et bordure changent selon des variables réactives avec
v-bind. - Créez un formulaire simple avec
v-modelpour capturer le nom, prénom et âge de l’utilisateur. - Ajoutez des événements click, mouseover et mouseout à un élément et affichez les informations dans la console.
- Créez un lien dont l’URL et les attributs (title, target) sont générés dynamiquement avec
v-bind. - Utilisez
v-oncepour afficher un élément qui ne doit pas être mis à jour même si les données changent. - Utilisez
v-htmlpour afficher du contenu HTML dynamique provenant d’une API (simulée).
Module 6 : Réactivité fondamentale
- Créez un compteur utilisant
refet ajoutez un affichage indiquant si le compteur est pair ou impair. - Créez un objet utilisateur avec
reactiveet affichez ses propriétés avec un formulaire de mise à jour. - Créez un tableau réactif de tâches avec
refet implémentez des fonctions pour ajouter, supprimer et marquer comme terminé. - Utilisez
isRefetunrefpour vérifier et manipuler des références dans différentes situations. - Créez un formulaire avec plusieurs champs réactifs et affichez un résumé des données saisies.
- Comparez l’utilisation de
refvsreactivepour un même scénario complexe (par exemple un formulaire imbriqué). - Créez un système de gestion de panier avec
reactivequi calcule automatiquement le total et les taxes.
Module 7 : Directives essentielles
- Créez une application avec un toggle qui affiche/masque plusieurs éléments avec
v-ifetv-else. - Créez une liste de tâches avec
v-foret ajoutez la possibilité de filtrer par statut (à faire, en cours, terminé). - Utilisez
v-showpour créer un système d’onglets où chaque onglet affiche un contenu différent. - Créez un formulaire de recherche avec
v-modelet les modificateurs.trim,.numberet.lazy. - Utilisez
v-foravec un objet et créez un tableau affichant les clés et les valeurs de l’objet. - Utilisez les modificateurs d’événements
.prevent,.stop,.selfet.oncedans différents scénarios. - Créez une liste avec
v-foret implémentez un système de tri dynamique avec des identifiants uniques.
Module 8 : Formulaires simples
- Créez un formulaire de contact complet avec validation des champs obligatoires et format d’email.
- Ajoutez une validation en temps réel pour un champ mot de passe avec des critères de sécurité.
- Créez un formulaire de login avec vérification du mot de passe et gestion des erreurs.
- Utilisez
v-modelavec un textarea pour un champ commentaire et ajoutez un compteur de caractères. - Créez un formulaire de recherche avec
v-modelet implémentez un système de suggestions automatiques. - Ajoutez des messages d’erreur personnalisés qui s’affichent quand un champ est invalide ou vide.
- Créez un formulaire d’inscription avec validation de la confirmation du mot de passe et conditions d’utilisation.
PHASE 2 : COMPOSANTS ET INTERACTIVITÉ
Module 9 : Single-File Components
- Créez un composant SFC pour afficher un bouton personnalisé avec différentes variantes (primary, secondary, danger).
- Créez un composant SFC pour afficher une carte de produit avec image, titre, description et prix.
- Créez un composant SFC pour afficher un en-tête de page avec navigation responsive.
- Créez un composant SFC pour afficher un pied de page avec informations légales et réseaux sociaux.
- Créez un composant SFC pour afficher une liste de tâches avec possibilité d’ajout et de suppression.
- Créez un composant SFC pour afficher un formulaire de recherche avec suggestions et historique.
- Créez un composant SFC pour afficher un système d’alerte personnalisé avec différents types (success, warning, error).
Module 10 : Props et Communication
- Créez un composant qui reçoit un message et un niveau de gravité en props et l’affiche avec le style approprié.
- Créez un composant avec des props typées strictement avec TypeScript et validez leur type avec des règles personnalisées.
- Créez un composant avec des valeurs par défaut pour les props et testez leur comportement quand elles ne sont pas fournies.
- Créez un composant qui transforme une prop avant de l’utiliser (par exemple, formater une date ou un nombre).
- Créez un composant avec des props optionnelles et obligatoires et documentez leur utilisation.
- Créez un composant qui valide une prop avec une fonction personnalisée et affiche un message d’erreur approprié.
- Créez un composant qui utilise des props avec des valeurs complexes (objets, tableaux) et implémentez une validation profonde.
Module 11 : Événements personnalisés
- Créez un composant enfant qui émet un événement quand un bouton est cliqué et un composant parent qui gère cet événement.
- Créez un composant enfant qui émet un événement avec des données complexes (objet ou tableau) et un composant parent qui les utilise.
- Créez un composant enfant qui valide les événements émis avec des règles personnalisées et affiche des messages d’erreur.
- Créez un composant enfant qui émet des événements personnalisés avec
defineEmitset utilisez-les dans un composant parent. - Créez un composant parent qui écoute et gère plusieurs événements différents de l’enfant avec des gestionnaires appropriés.
- Créez un composant enfant qui émet des événements à différents moments du cycle de vie et un composant parent qui les affiche.
- Créez un système de communication entre composants non hiérarchiques en utilisant un event bus personnalisé.
Module 12 : Slots basiques
- Créez un composant avec un slot basique pour afficher du contenu personnalisé et testez-le avec différents types de contenu.
- Créez un composant avec des slots nommés pour différentes parties (header, body, footer) et utilisez-le dans une page.
- Créez un composant avec un scoped slot pour passer des données au contenu et utilisez-le pour personnaliser l’affichage.
- Créez un composant avec un slot dynamique qui change selon une condition et testez différents scénarios.
- Créez un composant de layout avec des slots pour le header, le contenu principal et le footer, et utilisez-le dans votre application.
- Créez un composant de liste qui utilise un scoped slot pour personnaliser chaque élément et testez-le avec différents templates.
- Créez un composant d’onglets avec des slots pour chaque onglet et implémentez un système de navigation entre onglets.
Module 13 : Propriétés calculées
- Créez une propriété computed qui formate une date selon le format local de l’utilisateur.
- Créez une propriété computed qui filtre une liste de données selon un critère de recherche.
- Comparez les performances d’une méthode vs une propriété computed dans un scénario avec une grande liste de données.
- Créez une propriété computed avec des setters et des getters pour gérer une valeur complexe.
- Créez une propriété computed qui dépend de plusieurs variables réactives et observez son comportement.
- Créez une propriété computed qui calcule un total, une moyenne et un pourcentage à partir d’une liste d’éléments.
- Créez une propriété computed qui valide le statut d’un formulaire complexe avec plusieurs champs.
Module 14 : Watchers
- Créez un watcher qui affiche un message dans la console quand une variable change et inclut l’ancienne et la nouvelle valeur.
- Créez un watcher qui valide un champ de formulaire complexe avec des règles personnalisées.
- Créez un watcher qui déclenche une requête API quand une recherche change après un délai de 300ms.
- Utilisez un watcher profond pour observer les changements dans un objet complexe et affichez les modifications.
- Utilisez un watcher immédiat pour exécuter du code dès l’initialisation et afficher un message de bienvenue.
- Comparez l’utilisation d’un watcher vs une propriété computed pour un même scénario de filtrage de données.
- Créez un système de sauvegarde automatique avec un watcher qui sauvegarde les données dans le localStorage.
Module 15 : Cycle de vie
- Créez un composant qui affiche un message dans la console à chaque étape du cycle de vie avec des informations détaillées.
- Utilisez
onMountedpour charger des données depuis une API simulée et affichez-les dans le composant. - Utilisez
onBeforeUnmountpour nettoyer des ressources (comme des timers ou des écouteurs d’événements). - Créez un composant qui met en place un timer dans
onMountedet le nettoie dansonBeforeUnmount. - Utilisez
onUpdatedpour réagir aux mises à jour du composant et afficher un message quand certaines propriétés changent. - Créez un composant qui utilise
onBeforeUpdatepour comparer l’état avant et après mise à jour et affiche les différences. - Utilisez les hooks de cycle de vie pour implémenter un système de cache local avec expiration.
Module 16 : Directives personnalisées
- Créez une directive personnalisée pour mettre le focus sur un élément quand il est monté.
- Créez une directive personnalisée pour formater un nombre en devise selon la locale de l’utilisateur.
- Créez une directive personnalisée pour détecter les clics en dehors d’un élément (utile pour les modales).
- Créez une directive personnalisée pour appliquer une animation de défilement fluide vers un élément.
- Créez une directive personnalisée pour limiter la saisie à des chiffres dans un champ input.
- Créez une directive personnalisée pour afficher un tooltip personnalisé avec des options configurables.
- Créez une directive personnalisée pour masquer un élément après un délai configurable.
PHASE 3 : APPLICATIONS RÉELLES
Module 17 : Vue Router
- Configurez Vue Router dans un projet Vue.js et créez au moins 3 routes simples pour différentes pages.
- Créez un système de navigation avec
<RouterLink>entre plusieurs pages et stylisez les liens actifs. - Configurez une route par défaut pour les pages non trouvées (404) avec un composant personnalisé.
- Créez un layout commun pour plusieurs routes avec un en-tête et un pied de page partagés.
- Utilisez
router.pushpour rediriger après une action réussie (par exemple après soumission d’un formulaire). - Configurez des routes imbriquées pour un système de navigation complexe (par exemple un tableau de bord).
- Utilisez les métadonnées de route pour configurer dynamiquement le titre de la page et les méta-tags.
Module 18 : Navigation SPA
- Créez un système de navigation avec
<RouterLink>entre plusieurs pages et ajoutez des transitions entre les pages. - Utilisez
router.pushpour rediriger après une action etrouter.replacepour remplacer l’historique. - Créez un guard de navigation simple pour protéger une route réservée aux utilisateurs authentifiés.
- Utilisez les guards de navigation pour vérifier les permissions avant d’accéder à certaines fonctionnalités.
- Créez un système de navigation avec des paramètres dynamiques et utilisez-les pour afficher des données spécifiques.
- Implémentez un système de sauvegarde de l’état avant navigation et restauration après retour.
- Créez un système de navigation avec des transitions personnalisées et des animations fluides.
Module 19 : Routes dynamiques
- Créez une route dynamique pour afficher le détail d’un article de blog avec un identifiant unique.
- Utilisez
$route.paramspour accéder aux paramètres de route et charger les données correspondantes. - Créez des routes imbriquées pour un système de navigation complexe (par exemple un tableau de bord avec sous-sections).
- Utilisez des routes nommées pour la navigation et comparez avec l’utilisation d’URL absolues.
- Créez un système de pagination avec des routes dynamiques pour les numéros de page.
- Créez des routes avec plusieurs paramètres dynamiques et utilisez-les pour filtrer des données.
- Utilisez
router.resolvepour obtenir l’URL complète d’une route et créez un système de partage de liens.
Module 20 : Lazy loading
- Configurez le lazy loading pour les routes d’une application et analysez l’impact sur les performances.
- Utilisez des groupes de chunks pour optimiser le lazy loading et réduire le nombre de fichiers générés.
- Ajoutez des transitions de chargement personnalisées pendant le lazy loading des composants.
- Utilisez le préchargement des routes pour améliorer l’expérience utilisateur lors de la navigation.
- Configurez le lazy loading pour les composants non liés au routage et analysez son impact.
- Créez un système de chargement personnalisé avec indicateur de progression pendant le lazy loading.
- Analysez l’impact du lazy loading sur les performances de l’application avec des outils comme Lighthouse.
Module 21 : Introduction Ă Pinia
- Installez et configurez Pinia dans un projet Vue.js et créez un store simple avec un state de base.
- Comparez Pinia avec Vuex et rédigez un rapport sur les différences majeures et les avantages de Pinia.
- Créez un store avec un state, des getters et des actions simples et utilisez-les dans un composant.
- Utilisez TypeScript avec Pinia pour typer les stores et expliquez les avantages de cette approche.
- Configurez Pinia avec des plugins pour ajouter des fonctionnalités comme le logging ou la persistance.
- Créez un store persistant avec localStorage et testez sa résilience après un rechargement de la page.
- Explorez les extensions de développement pour Pinia et documentez leur utilisation.
Module 22 : State, Getters, Actions
- Créez un store pour gérer un compteur avec des méthodes d’incrémentation, décrémentation et réinitialisation.
- Ajoutez des getters pour calculer des valeurs dérivées (par exemple, si le compteur est pair ou supérieur à un seuil).
- Créez des actions asynchrones pour simuler des appels API et gérer les états de chargement et d’erreur.
- Utilisez des actions pour modifier le state de manière contrôlée et ajoutez des validations.
- Créez un store avec un state complexe (objets imbriqués, tableaux) et implémentez des méthodes pour le manipuler.
- Utilisez des getters avec paramètres pour filtrer ou transformer des données selon des critères dynamiques.
- Créez des actions qui appellent d’autres actions et implémentez un système de gestion d’erreurs global.
Module 23 : Intégration composants
- Accédez à un store depuis un composant avec
useStoreet affichez des données du state dans le template. - Utilisez
mapState,mapGetters,mapActionspour mapper les éléments du store et simplifier l’accès. - Créez un composant qui modifie le state du store via des actions et observez les mises à jour dans d’autres composants.
- Créez un composant qui affiche des données du store et implémentez un système de mise à jour en temps réel.
- Utilisez plusieurs stores dans un même composant et gérez les interactions entre eux.
- Créez un système de communication entre composants non hiérarchiques via un store partagé.
- Utilisez des getters dans les templates pour afficher des données calculées et optimisez les performances.
Module 24 : Persistance données
- Créez un plugin Pinia pour persister automatiquement le state dans localStorage et testez sa résilience.
- Implémentez un système de panier d’achat avec persistance et gestion des produits ajoutés/supprimés.
- Créez un système de préférences utilisateur avec persistance (thème, langue, préférences d’affichage).
- Implémentez un système de sauvegarde automatique pour un formulaire complexe avec persistance.
- Créez un système de favoris avec persistance et gestion des doublons.
- Créez un système de thème personnalisé avec persistance et options de personnalisation avancées.
- Utilisez IndexedDB au lieu de localStorage pour une persistance plus robuste et testez avec de grandes quantités de données.
PHASE 4 : QUALITÉ ET DÉPLOIEMENT
Module 25 : Formulaires avancés
- Créez un formulaire avec des champs complexes (date, heure, sélection multiple) et implémentez une validation complète.
- Implémentez une validation personnalisée pour un champ avec des règles complexes et messages d’erreur spécifiques.
- Créez un formulaire avec des champs dynamiques (ajout/suppression de champs) et gestion de la validation.
- Utilisez VeeValidate pour la validation des formulaires et comparez avec une approche manuelle.
- Créez un formulaire avec des règles de validation basées sur d’autres champs (par exemple, confirmation de mot de passe).
- Implémentez un système de validation en temps réel avec feedback immédiat pour l’utilisateur.
- Créez un formulaire avec des champs conditionnels qui apparaissent/disparaissent selon les réponses précédentes.
Module 26 : Tests unitaires
- Configurez Vitest dans un projet Vue.js et écrivez un test de base pour vérifier que le projet fonctionne.
- Écrivez des tests unitaires pour une fonction simple de calcul ou de formatage avec différents cas de test.
- Testez une propriété computed dans un store Pinia avec différents états initiaux.
- Testez une méthode d’un composant avec différentes entrées et vérifiez les sorties attendues.
- Testez un watcher dans un composant et vérifiez qu’il réagit correctement aux changements.
- Testez un composant avec des props en simulant différentes configurations et vérifiez le rendu.
- Testez un composant avec des événements personnalisés en déclenchant des événements et vérifiant les réponses.
Module 27 : Tests E2E
- Configurez Cypress dans un projet Vue.js et écrivez un test de base pour vérifier que l’application démarre.
- Écrivez des tests E2E pour la navigation entre pages et vérifiez que les chemins sont corrects.
- Testez un formulaire complet avec Cypress, depuis la saisie jusqu’à la soumission réussie.
- Testez un composant interactif avec Cypress en simulant des interactions utilisateur complexes.
- Écrivez des tests E2E pour les cas d’erreur (champs invalides, erreurs API) et vérifiez les messages.
- Configurez une pipeline CI/CD pour exécuter les tests automatiquement à chaque push sur GitHub.
- Écrivez des tests E2E pour les fonctionnalités authentifiées en simulant le processus de connexion.
Module 28 : Accessibilité
- Ajoutez des transitions simples Ă un composant avec
<Transition>et configurez des délais personnalisés. - Créez des animations personnalisées avec des classes CSS et utilisez-les avec le composant
<Transition>. - Utilisez
<TransitionGroup>pour animer des listes lors de l’ajout/suppression d’éléments. - Ajoutez des propriétés ARIA appropriées à vos composants pour améliorer l’accessibilité avec les lecteurs d’écran.
- Créez des formulaires accessibles avec des labels appropriés, des relations aria et une navigation au clavier.
- Testez l’accessibilité de votre application avec des outils comme Lighthouse et documentez les améliorations.
- Créez des animations qui respectent la préférence utilisateur pour les mouvements réduits (prefers-reduced-motion).
Module 29 : Build production
- Générez un build de production avec Vite et analysez les fichiers générés dans le dossier dist.
- Analysez le bundle avec Vite Bundle Analyzer et identifiez les dépendances les plus volumineuses.
- Configurez des alias pour simplifier les imports et réduire les chemins relatifs dans le code.
- Optimisez les imports pour réduire la taille du bundle en utilisant l’importation sélective des bibliothèques.
- Configurez le code splitting pour améliorer les performances de chargement initial de l’application.
- Configurez la compression Gzip et Brotli pour les assets et mesurez l’impact sur la taille des fichiers.
- Configurez des préchargements stratégiques pour améliorer le temps de chargement des routes fréquemment visitées.
Module 30 : Analyse performances
- Utilisez Vue DevTools pour analyser les performances d’un composant et identifier les re-rendus inutiles.
- Configurez le lazy loading pour des images et mesurez l’impact sur les métriques de performance.
- Implémentez la virtualisation des listes pour améliorer les performances avec de grandes quantités de données.
- Configurez Sentry pour le monitoring des erreurs et testez sa capacité à capturer et rapporter les exceptions.
- Analysez les temps de chargement avec Lighthouse et identifiez les domaines d’amélioration prioritaires.
- Identifiez et résolvez les problèmes de re-rendu inutiles en utilisant les outils de débogage de Vue.
- Configurez des métriques personnalisées pour le monitoring des performances critiques de votre application.
Module 31 : Déploiement
- Déployez une application Vue.js sur Vercel et configurez un domaine personnalisé.
- Déployez une application Vue.js sur Netlify et configurez des redirectes personnalisées.
- Configurez une pipeline CI/CD avec GitHub Actions pour tester et déployer automatiquement sur push.
- Configurez des environnements de staging et de production avec des variables d’environnement différentes.
- Configurez des variables d’environnement sécurisées pour les clés API et autres informations sensibles.
- Configurez Storybook pour documenter les composants et générez une documentation interactive.
- Mettez en place un système de déploiement canari pour tester les nouvelles fonctionnalités sur un petit groupe d’utilisateurs.
Module 32 : Monitoring
- Mettez à jour un projet Vue.js existant vers la dernière version et résolvez les problèmes de compatibilité.
- Utilisez
defineModelpour simplifier la gestion des modèles dans un formulaire complexe. - Utilisez
useIdpour générer des identifiants uniques et résoudre les problèmes d’accessibilité. - Utilisez
useTemplateRefpour accéder plus facilement aux références de template dans la Composition API. - Implémentez l’hydratation paresseuse pour améliorer les performances du rendu côté serveur.
- Utilisez
onWatcherCleanuppour nettoyer correctement les ressources dans les watchers asynchrones. - Utilisez le shorthand v-bind pour simplifier la syntaxe et rendre le code plus lisible dans les templates.
PrĂŞt Ă passer Ă la suite ?
Vous avez terminé cette leçon sur 📚 Exercices Pratiques pour le Plan d'Apprentissage Vue.js 3. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.