Historique utilisateur et UI optimiste
Permets à l’utilisateur d’ajouter, visualiser et retirer des films de son historique avec une UX fluide.
Contexte et enjeux
Dans ce module, nous allons enrichir notre application Next.js 15 avec une fonctionnalité essentielle : la gestion de l’historique de visionnage et une expérience utilisateur réactive grâce à l’UI optimiste. Après avoir mis en place l’affichage de films et de séries, nous souhaitons maintenant permettre à chaque utilisateur de :
- Ajouter un film ou une série à son historique.
- Visualiser son historique en mode agrégé (par date et par année).
- Supprimer un élément de son historique, instantanément, sans temps mort.
En combinant React Server Components, Server Actions et Prisma, nous garantissons une synchronisation robuste entre le client et le serveur, tout en offrant une interface fluide qui réagit immédiatement aux interactions de l’utilisateur.
Pourquoi l’UI optimiste ?
Traditionnellement, lorsqu’on effectue une mutation côté serveur (par exemple, supprimer un élément), l’interface attend la réponse avant de mettre à jour l’affichage. Avec l’UI optimiste, on :
- Applique d’abord la modification côté client (suppression visuelle immédiate).
- Lance la mutation serveur en arrière-plan.
- En cas de succès, rien ne change, l’interface était déjà à jour.
- En cas d’échec, on peut restaurer l’état précédent ou afficher un message d’erreur.
Cette technique améliore la réactivité perçue et réduit la latence ressentie par l’utilisateur.
Aperçu technique
Schéma Prisma
Nous ajouterons un modèle HistoryItem
dans schema.prisma
:
- id (autoincrémenté)
- lien vers l’utilisateur (
userId
) movieId
ouserieId
createdAt
par défaut à la date d’insertion
Server Actions
addHistoryItem
pour créer un nouvel enregistrement.removeHistoryItem
pour supprimer un élément, puisrevalidatePath('/history')
afin de rafraîchir la page History.
React Server Components et Client Components
- La page
/history
sera un RSC qui appellegetHistory
via Prisma. - Le composant
<HistoryList />
(Client) utiliserauseOptimistic
pour gérer localement la liste etuseTransition
pour le feedback de suppression.
Ce que vous allez maîtriser
- Configurer et migrer un nouveau modèle Prisma pour l’historique.
- Créer et sécuriser des Server Actions avec authentification.
- Mettre en œuvre une interface optimiste avec React (useOptimistic, useTransition).
- Organiser votre code en Server Components et Client Components pour un rendu full-stack performant.
Avant de commencer
Vérifiez que votre fonctionnalité d’authentification est opérationnelle, car l’historique est strictement lié à l’utilisateur connecté.
Nous plongeons désormais dans la mise en place étape par étape de cette fonctionnalité clé, alliant Prisma, Next.js 15 et UX optimiste.