Vue.js 3での状態管理: Vuexの進化とPiniaの活用法

Vue.js 3では、状態管理のためにVuexが進化を遂げ、さらに軽量で使いやすいPiniaが登場しました。本記事では、VuexとPiniaの特徴、使用方法、そして適切な使い分けについて詳細に解説します。
Vuexとは何か
VuexはVue.js公式の状態管理ライブラリで、アプリ全体の状態を一元管理するために使用されます。特徴的な要素として、ストア、ゲッター、ミューテーション、アクションがあります。
import { createStore } from 'vuex';
const store = createStore({
state() {
return {
count: 0,
};
},
mutations: {
increment(state) {
state.count++;
},
},
actions: {
asyncIncrement({ commit }) {
setTimeout(() => {
commit('increment');
}, 1000);
},
},
getters: {
doubleCount(state) {
return state.count * 2;
},
},
});
export default store;
Vuex 4での改良点
Vuex 4では、Vue 3との互換性を確保しつつ、従来のAPIが維持されています。
Piniaとは何か
PiniaはVue.js 3に最適化された新しい状態管理ライブラリです。Vuexと比較して軽量で直感的なAPIを提供します。
import { defineStore } from 'pinia';
export const useCounterStore = defineStore('counter', {
state: () => ({
count: 0,
}),
actions: {
increment() {
this.count++;
},
asyncIncrement() {
setTimeout(() => {
this.increment();
}, 1000);
},
},
getters: {
doubleCount: (state) => state.count * 2,
},
});
Piniaの導入方法
Piniaをプロジェクトに追加するには、以下のコマンドを使用します。
npm install pinia
その後、VueアプリケーションにPiniaを登録します。
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';
const app = createApp(App);
const pinia = createPinia();
app.use(pinia);
app.mount('#app');
Piniaの基本的な使い方
Piniaストアを定義してコンポーネントで使用します。
<template>
<div>
<p>Count: {{ count }}</p>
<button @click="increment">Increment</button>
</div>
</template>
<script>
import { useCounterStore } from './stores/counter';
export default {
setup() {
const counterStore = useCounterStore();
return {
count: counterStore.count,
increment: counterStore.increment,
};
},
};
</script>
PiniaとVuexの違い
PiniaはVuexと比較して以下の特徴を持っています:
- ミューテーションが不要
- TypeScriptサポートが容易
- 直感的なAPI設計
Piniaのモジュール化
Piniaではモジュール化が簡単に行えます。各ストアを独立したモジュールとして定義できます。
Vue Routerとの統合
PiniaをVue Routerと組み合わせて使用する例です。
import { useRouter } from 'vue-router';
export const useNavigationStore = defineStore('navigation', {
actions: {
goTo(route) {
const router = useRouter();
router.push(route);
},
},
});
Piniaでの非同期処理
非同期処理はアクションで簡単に実装できます。
Vue DevToolsでのPiniaのサポート
PiniaはVue DevToolsと統合されており、状態の確認やデバッグが容易です。
Piniaを用いた状態の永続化
Piniaではプラグインを使って状態をローカルストレージに永続化することが可能です。
VuexからPiniaへの移行ガイド
既存のプロジェクトでVuexを使用している場合、Piniaへの移行も容易です。
まとめ
VuexとPiniaの両方にそれぞれの利点がありますが、Vue.js 3のプロジェクトではPiniaが優れた選択肢となることが多いです。適切なライブラリを選択し、効率的な状態管理を実現しましょう。
-
前の記事
Vue.jsのコンポジションAPIを使って再利用可能なロジックを実装する 2024.12.20
-
次の記事
draw.io オブジェクトをグリッド単位で移動させるショートカットキー 2024.12.20
コメントを書く