Vue Pinia 入門!基本的な使い方をマスター!

Vue Piniaは、Vue.jsアプリケーションの状態管理ライブラリとして注目を集めています。この記事では、Vue Piniaの基本的な使い方を詳しく解説し、初心者でも簡単に状態管理を実装できるようになることを目指します。状態管理に興味のある開発者や、より効率的なアプリケーション開発を目指す方にとって、この記事は必見です。Vue Piniaのインストール方法から、実際のコード例まで、ステップバイステップで解説します。
Vue Pinia 入門:基本的な使い方を解説
Vue Pinia は、Vue.js アプリケーションの状態管理を簡単に行うためのライブラリです。この記事では、Vue Pinia の基本的な使い方を解説します。状態管理に悩んでいる方や、Pinia を使ってみたい方にとって、役立つ情報が満載です。
Pinia のインストール方法
Pinia を使用するためには、まずプロジェクトにインストールする必要があります。以下に、Vue 3 プロジェクトに Pinia をインストールする手順を示します。
- ターミナルを開き、プロジェクトのルートディレクトリに移動します。
- 以下のコマンドを実行して、Pinia をインストールします。
npm install pinia
これで Pinia がプロジェクトにインストールされました。次に、main.js または main.ts に以下のコードを追加して、Pinia をアプリケーションにインテグレーションします。
import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' const app = createApp(App) app.use(createPinia()) app.mount('app')
Store の作成方法
Pinia では、store という単位で状態を管理します。Store は、アプリケーションの状態を保持し、その状態にアクセスしたり変更したりするためのメソッドを提供します。
以下に、基本的な store の作成方法を示します。
import { defineStore } from 'pinia' export const useCounterStore = defineStore('counter', { state: () => { return { count: 0 } }, actions: { increment() { this.count++ }, decrement() { this.count-- }, }, })
この例では、counter という名前の store を作成しています。state には、store で管理する状態を定義します。actions には、状態を変更するためのメソッドを定義します。
Store の利用方法
Store を作成したら、コンポーネントから利用することができます。以下に、コンポーネント内で store を利用する方法を示します。
import { ref } from 'vue' import { useCounterStore } from './stores/counter' export default { setup() { const counter = useCounterStore() const count = ref(counter.count) const increment = () => { counter.increment() count.value = counter.count } const decrement = () => { counter.decrement() count.value = counter.count } return { count, increment, decrement } }, }
この例では、useCounterStore を使用して store を取得し、counter 変数に格納しています。increment と decrement メソッドは、store の action を呼び出して状態を変更します。
Getter の使用方法
Pinia では、getter を使用して、store の状態を計算した値を取得できます。getter は、store の状態に基づいて派生的な値を計算するためのメソッドです。
以下に、getter を使用する方法を示します。
import { defineStore } from 'pinia' export const useCounterStore = defineStore('counter', { state: () => { return { count: 0 } }, getters: { doubleCount: (state) => state.count 2, }, actions: { increment() { this.count++ }, decrement() { this.count-- }, }, })
この例では、doubleCount という getter を定義しています。getter は、store の状態に基づいて計算された値を返します。コンポーネントから getter を利用する方法は以下の通りです。
import { ref, computed } from 'vue' import { useCounterStore } from './stores/counter' export default { setup() { const counter = useCounterStore() const count = ref(counter.count) const doubleCount = computed(() => counter.doubleCount) const increment = () => { counter.increment() count.value = counter.count } const decrement = () => { counter.decrement() count.value = counter.count } return { count, doubleCount, increment, decrement } }, }
Plugins の使用方法
Pinia には、plugins という機能があります。Plugins を使用することで、store に追加の機能を実装できます。 Plugins は、store が作成されるたびに実行される関数です。
以下に、基本的な plugin の使用方法を示します。
import { defineStore, createPinia } from 'pinia' const pinia = createPinia() // Plugin の定義 const myPlugin = (store) => { store.$myCustomMethod = (value) => { console.log(`Called custom method with value: ${value}`) } } // Plugin の登録 pinia.use(myPlugin) // Store の定義 export const useCounterStore = defineStore('counter', { state: () => { return { count: 0 } }, actions: { increment() { this.count++ this.$myCustomMethod(this.count) }, decrement() { this.count-- this.$myCustomMethod(this.count) }, }, })
この例では、myPlugin という plugin を定義し、store に $myCustomMethod というメソッドを追加しています。store の action からこのメソッドを呼び出すことができます。
| 機能 | 説明 |
|---|---|
| Store の作成 | 状態とアクションを定義して store を作成します。 |
| Store の利用 | コンポーネントから store を利用して状態にアクセスします。 |
| Getter の使用 | store の状態に基づいて計算した値を取得します。 |
| Plugins の使用 | store に追加の機能を実装します。 |
| インストール方法 | プロジェクトに Pinia をインストールして、アプリケーションに統合します。 |
よくある疑問
Pinia とは何ですか?
Pinia は、Vue 3 用の状態管理ライブラリです。他の状態管理ライブラリと比べて、シンプルで軽量であり、React と同様のフックベースの API を提供します。Pinia は、ストアの作成、状態の管理、アクションの実行、ゲッターの定義などを直感的に行うことができます。また、TypeScript との互換性が高く、開発者が型安全なコードを容易に書けるように支援します。
Pinia を使用して基本的なストアをどのように作成しますか?
Pinia を使用して基本的なストアを作成するには、まず ストアのモジュール を定義します。これには、状態(state)、アクション(actions)、ゲッター(getters)を含めることができます。通常、ストアは store ディレクトリに配置され、それぞれのストアは .ts ファイルとして作成されます。以下は、シンプルなストアの例です: typescript import { defineStore } from 'pinia'; export const useMainStore = defineStore('main', { state: () => ({ count: 0, }), actions: { increment() { this.count++; }, }, getters: { doubleCount: (state) => state.count 2, }, }); このストアでは、count という状態を定義し、increment アクションでその値を増加させ、doubleCount ゲッターで現在の値の2倍を取得できます。
Pinia で状態をグローバルに共有するにはどうすればよいですか?
Pinia で状態をグローバルに共有するには、まずアプリケーションで Pinia インスタンス を作成し、それをプラグインとして使用する必要があります。以下は、Vue 3 アプリケーションで Pinia をセットアップする方法の例です: typescript 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'); 次に、各コンポーネントでストアをインポートして使用できます。ストアの状態、アクション、ゲッターは useStore フックを使用してアクセスできます。例えば: typescript import { useMainStore } from '@/stores/main'; export default { setup() { const mainStore = useMainStore(); return { mainStore, }; }, }; これにより、mainStore の状態やアクションをコンポーネント内で自由に利用できます。
Pinia で TypeScript を使用するにはどうすればよいですか?
Pinia はTypeScript と完全に互換性を持っています。TypeScript を使用することで、状態、アクション、ゲッターの型安全な定義と使用が可能になります。以下の例では、TypeScript を使用してストアを作成する方法を示します: typescript import { defineStore } from 'pinia'; interface State { count: number; } export const useMainStore = defineStore('main', { state: (): State => ({ count: 0, }), actions: { increment(): void { this.count++; }, }, getters: { doubleCount(state: State): number { return state.count 2; }, }, }); この例では、State インターフェースを使用して状態の型を定義し、アクションとゲッターもそれぞれの戻り値の型を明示的に指定しています。これにより、開発者が型エラーを検出しやすくなり、コードの信頼性が向上します。

こちらもおすすめです