Skip to content

Les données (state) ​

Le state d’un store Pinia contient les données centrales de votre application. Ce sont elles que vous allez afficher, trier, filtrer, modifier...

Exemple dans le Pokédex ​

Voici le state du store Pokédex :

js
state: () => ({
  pokemons: [],
  types: [],
  isLoading: false,
  error: null,
})
PropriétéTypeValeur initialeRôle
pokemonsArray[]Liste de tous les Pokémon
typesArray[]Types de Pokémon (Feu, Eau, etc.)
isLoadingBooleanfalsetrue pendant les appels API
errorString|nullnullMessage d’erreur éventuel

Toujours initialiser chaque propriété

Même si le tableau sera rempli plus tard par une action, on l’initialise à []. Même si error est vide au départ, on l’initialise à null. Cela permet à Vue de rendre ces propriétés réactives dès le début.

Accéder au state dans un composant ​

Pour utiliser les données du store, on l’importe et on y accède directement :

js
import { usePokemonStore } from ‘@/stores/pokemonStore’

const pokemonStore = usePokemonStore()

console.log(pokemonStore.pokemons)    // Affiche le tableau de Pokémon
console.log(pokemonStore.isLoading)   // true ou false

Dans le template :

vue
<p>Nombre de Pokémon : {{ pokemonStore.pokemons.length }}</p>
<p v-if="pokemonStore.isLoading">Chargement...</p>
<p v-if="pokemonStore.error" class="text-red">{{ pokemonStore.error }}</p>

Destructurer avec storeToRefs() ​

Si on veut destructurer les propriétés du store, il faut utiliser storeToRefs() pour garder la réactivité :

js
import { storeToRefs } from ‘pinia’

// ❌ MAUVAIS — pokemons n’est plus réactif
const { pokemons } = pokemonStore

// ✅ BON — pokemons reste réactif
const { pokemons, isLoading, error } = storeToRefs(pokemonStore)

Règle simple : storeToRefs() pour le state et les getters, destructuration directe pour les actions (ce sont des fonctions, pas des données réactives).

Modifier les données ​

Il est déconseillé de modifier le state directement dans les composants.

js
// ❌ À éviter
pokemonStore.pokemons.push(newPokemon)

// ✅ Utiliser une action
pokemonStore.addPokemon(newPokemon)

Les actions garantissent que la logique métier reste dans le store, pas éparpillée dans les composants.

👉 Lire le chapitre 5 – Getters

Documentation pour les cours de développement web