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
➕ Ajouter
3. Vue.js 3 - Composition API Vue
Composition API, Reactivity, Teleport, Suspense.
Compteur: {{ count }}
Double: {{ doubleCount }}
Incrémenter
💚 Simulation Vue.js - Counter
Compteur: 0
Double: 0
+1
-1
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
+1
-1
5. Svelte / SvelteKit Svelte
Réactivité au niveau langage, stores, animations.
Compteur: {count}
Double: {double}
Incrémenter
Contenu animé
{#await promise}
Chargement...
{:then data}
Données: {data}
{/await}
🟢 Simulation Svelte - Counter
Svelte Compteur: 0
Double: 0
+1
-1
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);
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)
React
Vue.js
Angular
Svelte
→
React
Vue.js
Angular
Svelte
🔄 Convertir
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
Lancer Benchmark
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
Créer application
10. Mini-projet : Portfolio Multi-framework Project
Démonstration du même composant dans 4 frameworks.
🎨 Même application - 4 frameworks
🔄 Initialiser démos
📡 Synchroniser tous
🏆 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 !