Vue : construire une application web (école d'ingénieur) · Chapitre 10 · Application directe du cours
La persistance à la main
Pinia : un état partagé par toute l'application · niveau 2
Énoncé
Sans utiliser useStockage, écrire un store du panier qui relit son contenu dans localStorage à sa création et l'y réécrit à chaque modification, même quand seule une quantité change. Le vérifier en recréant Pinia, comme le fait un rechargement de la page.
Corrigé
import { computed, ref, watch } from "vue";
import { defineStore } from "pinia";
const CLE = "librairie-panier";
function relire() {
try {
return JSON.parse(localStorage.getItem(CLE)) ?? [];
} catch {
return []; // stockage interdit, ou contenu illisible
}
}
export const usePanierStore = defineStore("panier", () => {
const lignes = ref(relire()); // relu à la création du store
const nombre = computed(() => lignes.value.reduce((s, l) => s + l.quantite, 0));
// Réécrit à chaque modification, même profonde (une quantité qui change).
watch(lignes, (valeur) => localStorage.setItem(CLE, JSON.stringify(valeur)), { deep: true });
function ajouter(livre) {
const ligne = lignes.value.find((l) => l.isbn === livre.isbn);
if (ligne) ligne.quantite += 1;
else lignes.value.push({ isbn: livre.isbn, titre: livre.titre, prix: livre.prix, quantite: 1 });
}
return { lignes, nombre, ajouter };
});
Le test ajoute deux fois le même livre, lit le stockage, puis crée une nouvelle Pinia et un nouveau store :
stocké : 78 caractères :
[
{
isbn: '9782956300014',
titre: 'Programmation Java',
prix: 32,
quantite: 2
}
]
relu : 2 article(s), même objet ? false
{ deep: true }est indispensable : le second ajout ne remplace pas le tableau, il change la quantité d'une ligne.- L'écriture a lieu après le code synchrone (le test attend un
nextTick) : dix modifications de suite ne coûtent qu'une écriture. - Le nouveau store n'est pas le même objet, mais il a relu les deux exemplaires.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.