Vue : construire une application web (école d'ingénieur) · Chapitre 10 · Application directe du cours
État, accesseur ou action ?
Pinia : un état partagé par toute l'application · niveau 1 (application)
Énoncé
Voici le store des préférences d'affichage d'une application :
import { computed, ref, watch } from "vue";
import { defineStore } from "pinia";
const THEMES = ["clair", "sombre"];
export const usePreferencesStore = defineStore("preferences", () => {
const theme = ref("clair");
const taillePolice = ref(100); // en %
const historique = ref([]);
const estSombre = computed(() => theme.value === "sombre");
const classeRacine = computed(() => `theme-${theme.value}`);
function basculerTheme() {
theme.value = estSombre.value ? "clair" : "sombre";
}
function agrandir() {
taillePolice.value = Math.min(taillePolice.value + 10, 200);
}
watch(theme, (t) => historique.value.push(t));
return { theme, taillePolice, estSombre, classeRacine, basculerTheme, agrandir };
});
export { THEMES };
Ranger chacun des sept noms ci-dessous parmi l'état, les accesseurs et les actions du store. Lequel pose problème, et pourquoi ?
theme,taillePolice,historique;estSombre,classeRacine;basculerTheme,agrandir.
Corrigé
- État :
themeettaillePolice(desrefrenvoyées). - Accesseurs :
estSombreetclasseRacine(descomputed). - Actions :
basculerThemeetagrandir.
historique pose problème : c'est une ref, donc de l'état, mais elle n'est pas renvoyée. Elle reste vivante (le watch la remplit), mais aucun composant ne peut la lire, Vue DevTools ne la montre pas, et Pinia ne la compte pas dans l'état du store. Le test l'affiche :
état ($state) : {"theme":"clair","taillePolice":100}
historique dans le store ? false
Il faut l'ajouter à l'objet renvoyé. (THEMES, constante du module hors du store, n'est pas concernée : elle ne change jamais.)
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.