Uso sem setup
A Pinia pode ser usada mesmo se não estivermos usando a API de composição (se estivermos usando a Vue <2.7, ainda precisamos instalar a extensão @vue/composition-api
). Embora recomendemos que os programadores experimentem e aprendam a API de composição, pode não ser ainda a altura certa para alguns e para a sua equipa, alguns podem estar no processo de migração duma aplicação, ou qualquer outro motivo. Existem algumas funções:
mapStores
mapState
mapWritableState
- ⚠️
mapGetters
(apenas por conveniência de migração, recomendamos usar amapState()
) mapActions
Dar Acesso a Toda a Memória
Se precisarmos de aceder a praticamente tudo a partir da memória, poderá ser demasiado complicado mapear todas as propriedades da memória... Em vez disso, podemos obter acesso a toda a memória com mapStores()
:
import { mapStores } from 'pinia' // dadas duas memórias com os seguintes identificadores const useUserStore = defineStore('user', { // ... }) const useCartStore = defineStore('cart', { // ... }) export default { computed: { // nota que não passamos um vetor, apenas uma memória após outra // cada memória será acessível como o seu identificador + 'Store' ...mapStores(useCartStore, useUserStore) }, methods: { async buyStuff() { // usá-las em qualquer lugar! if (this.userStore.isAuthenticated()) { await this.cartStore.buy() this.$router.push('/purchased') } }, }, }
Por padrão, a Pinia adicionará o sufixo "Store"
ao id
de cada memória. Podemos personalizar este comportamento chamando a função setMapStoreSuffix()
:
import { createPinia, setMapStoreSuffix } from 'pinia' // remover completamente o sufixo: `this.user`, `this.cart` setMapStoreSuffix('') // `this.user_store`, `this.cart_store` // (está tudo bem, não julgaremos ninguém) setMapStoreSuffix('_store') export const pinia = createPinia()
TypeScript
Por padrão, todos os auxiliares de mapas suportam o conclusão automática da escrita de código e não precisamos de fazer nada. Se chamarmos setMapStoreSuffix()
para alterar o sufixo "Store"
, precisaremos também adicioná-lo em algum lugar num ficheiro de TypeScript ou no nosso ficheiro global.d.ts
. O local mais conveniente seria o mesmo local onde chamamos setMapStoreSuffix()
:
import { createPinia, setMapStoreSuffix } from 'pinia' setMapStoreSuffix('') // remover completamente o sufixo export const pinia = createPinia() declare module 'pinia' { export interface MapStoresCustomization { // definir o mesmo valor que o anterior suffix: '' } }
AVISO
Se estivermos a usar um ficheiro de declaração da TypeScript (como global.d.ts
), temos de nos certificar de importarmos 'pinia'
no topo do ficheiro para expor todos os tipos existentes.