Adloun

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 : theme et taillePolice (des ref renvoyées).
  • Accesseurs : estSombre et classeRacine (des computed).
  • Actions : basculerTheme et agrandir.

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →