Imprimer
Catégorie : R3.01 - dev. Web côté client (vuejs)
Affichages : 12

L'archive des sources (répertoire src) pour les démonstrations est téléchargeable [ ici ]


 Préambule

 

 1°/ Objectifs de Pinia

 

 

ATTENTION ! Ce n'est pas parce que l'on utilise Pinia que l'on va mettre toutes les données dans le store. Les composants peuvent toujours définir des variables locales, si elles ne sont pas nécessaires à d'autres composants.

 

2°/ Principes basiques de Pinia

 

  

3°/ Créer un store

3.1°/ La fonction de création

import { defineStore } from 'pinia'
export const useMyStore = defineStore('mystore', () => {
  // définition du store
})

 

3.2°/ La définition du store

 

Remarques :

 

Exemple (dans stores/count.js) :

import { defineStore } from 'pinia'
import {ref, computed} from 'vue'
export const useCountStore = defineStore('countstore', () => {
  // STATE
  const count = ref(0)
  // GETTERS
  const doubleCount = computed( () => 2*count.value)
  const fourthCount = computed( () => 2*doubleCount.value)
  // ACTIONS
  function incCount(amount) {
    count.value += amount
  }
  return { count, doubleCount, fourthCount, incCount }
})
 

4°/ accès au store dans les composants

4.1°/ mettre en place l'accès

Exemple :

<script setup>
import {useCountStore} from '@/stores/count.js'
const countStore = useCountStore()
...
</script>

 

4.2°/ Manipuler le store

Exemple :

<template>
  <div>
      {{ countStore.count }} {{ countStore.doubleCount }}
      <button @click=countStore.incCount(5)>Inc by 5</button>
      <button> @click="reset">Reset</button>
  </div>
</template>
<script setup>
import {useCountStore} from '@/stores/count.js'
const countStore = useCountStore()
function reset() {
  countStore.incCount( -countStore.count) // example of calling an action, would be simpler to do countStore.count = 0
  console.log(countStore.doubleCount)
}
</script>

 

4.3°/ Subtilités

 

4.3.1°/ Getters avec paramètre

Exemple (dans le store count.js)  :

const multBy = computed( () => amount => count.value*amount)

 Exemple d'utilisation dans le template d'un composant :

{{ countStore.multBy(3) }}

4.3.2°/ Accès "externe" à un store

4.3.3°/ Masquer l'utilisation du store dans le template

Exemple :

<template>
      {{ count }}
      <button @click=inc(5)>Inc by 5</button>
</template>
<script setup>
import {useCountStore} from '@/stores/count.js'
import {computed} from 'vue'
const countStore = useCountStore()

const count = computed(() => countStore.count)

function inc(amount) {
  countStore.incCount(amount)
}
</script>

 

5°/ Démonstration