【Vue.js】Piniaには2種類の書き方がある

Vue.jsの状態管理ライブラリ、Piniaの学習をしていて

記事によって書き方が違うと感じたので、調査してみました。

すると、Piniaには2種類の書き方があることを知りました。

今回はPiniaの2種類の書き方について紹介していきたいと思います。

目次

Piniaの2種類の書き方

Option Stores

1つ目の書き方はOption Storesという書き方です。

こちらはVue2で使われているOptions APIに似たような書き方です。

export const useCounterStore = defineStore('counter', {
  state: () => ({ count: 0 }),
  getters: {
    double: (state) => state.count * 2
  },
  actions: {
    increment() {
      this.count++
    }
  }
})

state, getters, actionsをオブジェクトで定義します。

メリット

  • Vue2にも馴染みがあり、Vuexと似た構造。
  • シンプルでわかりやすく、初心者向き。
  • 型補完(TypeScript)も比較的しっかり効く。
  • 公式ドキュメントでも例が多い。

デメリット

  • 複雑なロジックの再利用や外部関数の組み込みがしづらい。
  • Composition APIとの統一感が薄れる。

Setup Stores

2つ目の書き方はSetup Storesという書き方です。

こちらはVue3で使われているComposition APIに似た書き方です。

export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  const double = computed(() => count.value * 2)
  function increment() {
    count.value++
  }

  return { count, double, increment }
})

countがstate、doubleがgetters、incrementがaction

を表します。

Setup Storesで書く場合は全てreturn 返すオブジェクトの中に含めないといけない点に注意!

メリット

  • Composition APIと完全に統一感あり
  • ref, reactive, computed, watchなど、Vueの機能を自由に使える。
  • 外部Composableの再利用がしやすい。
  • テストしやすく、スケーラブルな設計に向いている。
  • 複雑な状態管理(フォームや非同期ロジックなど)と相性が良い。

デメリット

  • 書き方に慣れるまで少し難しい。
  • Option Storeより冗長に感じることがある。

どちらを使うと良いか

Vue3がComposition APIをサポートしているので

Setup Storesを使う方が良い。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

電気制御設計→ITエンジニア
前職は電気系のエンジニアで物流倉庫などの設備を動かしていました。
現在はITエンジニアとして開発に従事。
業務では主にUnity、C#、.NETを利用。
UnityとC#を用いて業務用スマホアプリを完成。
現在、AWS、TypeScript、Nodeの案件に参画中。

コメント

コメントする

目次