⚛️ JavaScript - Partie 9

Frameworks Frontend Modernes : React, Vue.js, Angular, Svelte

🎨 Niveau Fullstack Framework
0%

1. Panorama des Frameworks Overview

Comparaison des principaux frameworks frontend en 2024.

⚛️
React

Bibliothèque UI de Facebook. Virtual DOM, JSX, Hooks.

Meta 2013
💚
Vue.js

Framework progressif. Syntaxe intuitive, Single-file components.

Evan You 2014
🅰️
Angular

Framework complet Google. TypeScript, RxJS, Ivy.

Google 2010
🟢
Svelte

Compilateur, pas de Virtual DOM. Réactivité native.

Rich Harris 2016
Critère React Vue.js Angular Svelte
Courbe d'apprentissage Moyenne Facile Difficile Facile
Performance Très bonne Très bonne Bonne Excellente
Bundle size (min) ~40KB ~30KB ~65KB ~2KB
Écosystème ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
Jobs marché FR 70% 20% 25% 5%

2. React 18+ Approfondi React

Hooks avancés, Concurrent Features, Server Components.

// React 18 - Concurrent Features import { startTransition, useTransition, useDeferredValue } from 'react'; function SearchResults({ query }) { const [isPending, startTransition] = useTransition(); const deferredQuery = useDeferredValue(query); const results = useMemo(() => { return searchDatabase(deferredQuery); }, [deferredQuery]); return (
{isPending && }
); } // Custom Hook avancé function useLocalStorage(key, initialValue) { const [storedValue, setStoredValue] = useState(() => { try { const item = window.localStorage.getItem(key); return item ? JSON.parse(item) : initialValue; } catch { return initialValue; } }); const setValue = (value) => { try { const valueToStore = value instanceof Function ? value(storedValue) : value; setStoredValue(valueToStore); window.localStorage.setItem(key, JSON.stringify(valueToStore)); } catch (error) { console.log(error); } }; return [storedValue, setValue]; } // React Server Components (Next.js App Router) async function UserProfile({ userId }) { const user = await db.user.findUnique({ where: { id: userId } }); return
Bonjour {user.name} !
; }
⚛️ Simulation React - Todo App

3. Vue.js 3 - Composition API Vue

Composition API, Reactivity, Teleport, Suspense.

💚 Simulation Vue.js - Counter

Compteur: 0

Double: 0

4. Angular 17+ Angular

Signals, Standalone Components, Control Flow.

// Angular 17 - Standalone Component import { Component, signal, computed, effect } from '@angular/core'; import { CommonModule } from '@angular/common'; @Component({ selector: 'app-counter', standalone: true, imports: [CommonModule], template: `

Compteur: {{ count() }}

Double: {{ doubleCount() }}

@if (count() > 5) {

🎉 Vous avez dépassé 5 !

} @for (item of items(); track item.id) {
  • {{ item.name }}
  • }
    ` }) export class CounterComponent { // Signals (nouvelle réactivité) count = signal(0); doubleCount = computed(() => this.count() * 2); items = signal([ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' } ]); constructor() { effect(() => { console.log(`Count changed to: ${this.count()}`); }); } increment() { this.count.update(c => c + 1); } decrement() { this.count.update(c => c - 1); } } // Service avec Injection @Injectable({ providedIn: 'root' }) export class UserService { private http = inject(HttpClient); getUsers() { return this.http.get('/api/users'); } }
    🅰️ Simulation Angular - Signals

    Compteur Angular: 0

    Double: 0

    5. Svelte / SvelteKit Svelte

    Réactivité au niveau langage, stores, animations.

    Compteur: {count}

    Double: {double}

    Contenu animé
    {#await promise}

    Chargement...

    {:then data}

    Données: {data}

    {/await}
    🟢 Simulation Svelte - Counter

    Svelte Compteur: 0

    Double: 0

    6. State Management Multi-frameworks State

    Redux, Zustand, Pinia, NgRx, Svelte stores.

    // Zustand (React) const useStore = create((set) => ({ bears: 0, increase: () => set((state) => ({ bears: state.bears + 1 })), decrease: () => set((state) => ({ bears: state.bears - 1 })) })); // Pinia (Vue) export const useCounterStore = defineStore('counter', { state: () => ({ count: 0 }), getters: { double: (state) => state.count * 2 }, actions: { increment() { this.count++; } } }); // NgRx (Angular) const counterReducer = createReducer(initialState, on(increment, state => ({ ...state, count: state.count + 1 })), on(decrement, state => ({ ...state, count: state.count - 1 })) ); // Svelte Store (Svelte) import { writable } from 'svelte/store'; export const count = writable(0);
    📦 State Management Demo

    Zustand (React)

    0

    Pinia (Vue)

    0

    NgRx (Angular)

    0

    7. Migration & Équivalences Migration

    Comment passer d'un framework à l'autre.

    Concept React Vue.js Angular Svelte
    État local useState ref / reactive signal / @Input let / $:
    Effets useEffect watch / watchEffect ngOnInit / effect $: reactive
    Mémoïsation useMemo / useCallback computed computed / signal $: reactive
    Références DOM useRef ref / template ref ViewChild bind:this
    Communication parent-enfant props / callbacks props / emit @Input / @Output props / dispatch
    🔄 Migration Tool (Simulation)

    8. Performance & Optimisation Perf

    Techniques d'optimisation spécifiques à chaque framework.

    // React: React.memo, useMemo, useCallback const MemoizedComponent = React.memo(MyComponent); const expensiveValue = useMemo(() => compute(a, b), [a, b]); // Vue: v-once, v-memo, shallowRef
    {{ staticContent }}
    {{ item.name }}
    const shallow = shallowRef({ nested: 'data' }); // Angular: OnPush, ChangeDetectionStrategy @Component({ changeDetection: ChangeDetectionStrategy.OnPush }) export class MyComponent {} // Svelte: tick, beforeUpdate, afterUpdate import { tick } from 'svelte'; await tick(); // Attendre le DOM
    📊 Benchmark Simulation

    9. Écosystème & Outils Tools

    Build tools, DevTools, extensions, frameworks méta.

    🔧 Build Tools

    Vite - ⚡ Ultra rapide
    Webpack - Configurable
    esbuild - Minimaliste
    Parcel - Zero config

    🛠️ DevTools

    React DevTools
    Vue DevTools
    Angular DevTools
    Svelte DevTools

    📚 Meta-frameworks

    Next.js (React)
    Nuxt (Vue)
    Analog (Angular)
    SvelteKit (Svelte)

    🏗️ Create App - Simulation

    10. Mini-projet : Portfolio Multi-framework Project

    Démonstration du même composant dans 4 frameworks.

    🎨 Même application - 4 frameworks

    ⚛️ React

    React Demo

    💚 Vue.js

    Vue Demo

    🅰️ Angular

    Angular Demo

    🟢 Svelte

    Svelte Demo

    🏆 Compétences acquises - Frameworks Frontend

    ✅ React : Hooks, Concurrent, Server Components
    ✅ Vue.js : Composition API, Reactivity, Teleport
    ✅ Angular : Signals, Standalone, Control Flow
    ✅ Svelte : Réactivité native, Stores, Animations
    ✅ État global : Zustand, Pinia, NgRx, Stores
    ✅ Migration : Équivalences entre frameworks
    ✅ Performance : Optimisations spécifiques
    ✅ Écosystème : Vite, DevTools, Meta-frameworks

    📚 Comment choisir son framework ?

    • React → Marché dominant, grande communauté, Next.js
    • Vue.js → Courbe douce, excellente doc, Nuxt
    • Angular → Grandes entreprises, TypeScript natif, complet
    • Svelte → Performance, petit bundle, plaisant à coder
    • Astro → Islands architecture, multis-frameworks
    💡 Conseils pour le marché du travail (France 2024) :
    • React est le plus demandé (~70% des offres)
    • Vue.js est populaire dans les startups et agences web
    • Angular domine dans les grandes entreprises et banques
    • Svelte monte mais reste niche
    • Connaître les 3 principaux est un énorme plus !