Zpět na domů

Čistý store Pinia: struktura a praktiky

Článek popisuje praktiky tvorby čistých store v Pinia: mutace přes akce, setup syntax, odmítnutí watch a perzistence pluginy. Vhodné pro refactoring velkých Vue projektů. Obsahuje příklady kódu a checklist.

Ideální struktura store v Pinia pro Vue
Advertisement 728x90

Struktura čistého úložiště v Pinia: Osvědčené postupy

V rozsáhlých Vue projektech se úložiště Pinia často rozrůstají, což komplikuje údržbu. Správná struktura řeší problém: mutace pouze přes akce, setup syntax, absence vedlejších účinků uvnitř úložiště. Tím je zajištěna předvídatelnost a zjednodušeno testování pro středně pokročilé a senior vývojáře.

Mutace pouze přes akce

Přímá změna stavu z komponent vede k rozptýlené odpovědnosti. Příklad problematického kódu:

const docStore = useDocumentStore()
const { client } = storeToRefs(docStore)
client.value = null // Rozptýlená logika změn

Po čase se ladění stane nemožným: změny jsou rozptýleny po komponentech. Řešení — centralizované akce:

Google AdInline article slot
export const useDocumentStore = defineStore('documents', () => {
  const client = ref(null)
  const resetClient = () => { client.value = null }
  return { client, resetClient }
})

// V komponentu
 docStore.resetClient()

Jedna vstupní bod zjednodušuje přidání validace, logování nebo analytiky bez úprav v celém kódu.

Setup Stores místo Options API

Options API je pro úložiště zastaralý. Setup styl (defineStore(() => { ... })) zajišťuje:

  • Průhlednou reaktivitu bez this.
  • Snadnost testování.
  • Integraci s kompozabily.

Méně šablonového kódu, reaktivita jako v komponentech. Pro nová úložiště je přechod povinný — rozdíl je viditelný okamžitě.

Google AdInline article slot

Odmítnutí watch v úložištích

Watch uvnitř úložiště spouští skryté vedlejší účinky při změně stavu, což komplikuje ladění. Úložiště — pouze datové úložiště, bez dispečování událostí.

Nahrazujte watch explicitními voláními z komponent nebo kompozabilů. Reakci na routy, URL nebo externí události vyneste ven, předávajíce hotová data přes akce.

Persistence přes pluginy

Synchronizace s localStorage by se neměla míchat s obchodní logikou. Použijte pinia-plugin-persistedstate nebo vlastní obálku s testy.

Google AdInline article slot

Vyhněte se přímým localStorage.setItem v akcích — to narušuje čistotu úložiště a komplikuje refaktorování.

Úložiště jako čisté úložiště

Úložiště odpovídá pouze za čtení, ukládání a aktualizaci dat. Vyneste:

  • Odběry na router.
  • Parsování tokenů.
  • WebSocket logiku.
  • Výpočty mezi úložišti.

Kontrolní seznam před commitem:

  • Mohu nahradit úložiště souborem s konstantami a funkcemi bez rozbití architektury?
  • Pokud ne — přetíženo odpovědností, vyneste logiku.

Co je důležité

  • Centralizované mutace: akce místo přímého přístupu k ref.
  • Setup syntax: snazší testování, žádné this.
  • Bez watch: vedlejší účinky ven, úložiště zůstává předvídatelné.
  • Persistence odděleně: pluginy, ne v akcích.
  • Omezená odpovědnost: vynášení složité logiky do kompozabilů.

Tato struktura dělá úložiště malá, snadno mockovatelná a nezpůsobující paniku při refaktorování. Projekt se stává udržitelným a zvyk se rychle formuje.

— Editorial Team

Advertisement 728x90

Číst dál