プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Vue.js
  • 【Vue.js】「Vuex」の概要、Nuxt.jsでの活用
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Vue.js】「Vuex」の概要、Nuxt.jsでの活用

04.11

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

Vuexの役割

アプリケーションの状態管理をしてくれます。アプリケーションを開発していると一つの状態を複数の場所で参照したいという状況が必ず生まれます。もし何も考えずに実装してしまうと同じ種類の状態や状態を更新するロジックをアプリの複数箇所に実装してしまったりします。データフローを事前にしっかり考慮して設計する必要があります。Vuexの思想となっている「状態管理」や「Flux」については下記を参照ください。他にもElmアーキテクチャやReduxを参考に作られています。

【JavaScript】「状態管理」や「Flux」とは?

Vuexのメリット

  • Vue DevToolsを使えば状態変化をログとして見れたり任意の地点への状態へ巻き戻せる。

Vuexの構成要素:ストア

アプリケーションの状態を保持する役割です。アプリ内でただ一つのストアが存在するようにします。

構文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
const store = new Vuex.Store({
  //ステート
  state: {
   data:1
  },
 
  //ゲッター
  getters: {
    ゲッター名1: (state) => stateを使った計算
  },
 
  //ミュテーション
  mutations: {
    addData1 (state,payload){
      state.data1 += payload
    }
  },
 
  //アクションズ
  actions: {
    関数名(コンテキスト,payload){
      
    }
  }
 
})
 
//ミュテーションの実行
store.commit('addData1',1) //第二引数(この場合の1)をペイロードと呼ぶ。
 
//アクションの実行
store.dispatch('関数名')

ストアの構成要素

ストアには下記の4つの構成要素があります。大規模アプリであれば下記の要素はモジュール単位に分割して記述したりします。

  • ステート(State)
  • ゲッター(Getter)
  • ミュテーション(Mutation)
  • アクション(Action)

ステート

アプリケーション全体の状態を保持するオブジェクト(例えば、ログイン中のユーザーの情報)、ステートに対して何かしらの変更を行った場合は自動的にコンポーネントに即座に反映されます。(Vue.jsのリアクティブシステムを利用している)

ゲッター

ステートから計算された別の値データを返します。(例えば、商品の絞り込みを実施する等)、ゲッターを使用することでコンポーネント間で計算ロジックを共有することができます。コンポーネントのcomputedオプションに動作は似ています。

ミュテーション

ステートを更新する役割です。必ず同期処理のみ記述します。逆に言えばミュテーション以外以外でステートの更新を行うことは禁止されています。「Vue DevTools」を使えばステートの変化とミュテーションがどのような時系列で呼ばれるかを確認できます。また、どのような値に更新するかstore.commitの第二引数でミュテーションに指示しますが、その値をペイロードと呼びます。

アクション

Ajaxリクエストや、LocalStorageへの読み書きのような外部API。ミュテーションと異なり非同期な処理を記述します。最終的にはミュテーションを呼び出して値を更新します。

ストアとコンポーネントとの関係図

ストアのステートについて

ステートに保持するデータとして適しているもの

  • APIによりデータ取得中であることを表すフラグ
  • ログイン中のユーザー情報
  • ECサイトで商品カートの中に保存されているデータ

コンポーネント側で保持するデータとして適しているもの

  • フォームの入力状態等のデータ

ミュテーションの注意点

必ず同期処理にする必要があります。非同期にしてしまうとミュテーションの呼び出しとステートの更新を結びつけが困難になるためです。

アクションの詳細仕様

アクションには第一引数にコンテキストを渡します。コンテキストには下記の情報が含まれています。第二引数にはpayloadとしてどのミュテーションを更新するかを渡したりします。

  • 現在のステート(state)
  • 定義されているゲッター(getters)
  • 他のアクションを実行するメソッド(dispatch)
  • ミュテーションを実行するメソッド(commit)

state,getters

特定の状態によってアクションを実行するか制御するために使われます。

Nuxt.jsでの利用について

Nuxt.jsでは、Vuexを下記のモードで使い分けます。

  • クラシックモード
  • モジュールモード

クラシックモード

従来のVuex同様のモードになります。index.jsをstoreディレクトリに使います。

Vuexを読み込み、作成したstoreをexportします。

store/ファイル名.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import Vuex from 'vuex'
 
const state = () => new Vuex.Store({
state : {
  count: 0
},
mutations: {
    increment(state){
      state.count++
    }
  }
})
 
export default store

モジュールモード

Nuxt.jsで追加されたモードで、ファイルごとにストアを定義することができます。

定義の仕方が異なるだけで利用は通常のVuexと同様に行うことができます。

ファイルごとに、下記をexportします。

  • state
  • mutations
  • actions

実装例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export const state = () => ({
body: ""
})
 
export const mutations = {
update (state, text) {
state.body = text
},
}
 
export const actions = {
update (state, text) {
context.commit({
type: 'update',
text: text
})
}
}

スポンサーリンク
  • 2020 04.11
  • miyabisan2
  • コメントを書く
  • Nuxt.js, Vue.js
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 07.17

    【Vue.js】「トランジション」について

  2. 2018 07.08

    【Vue.js】「v-on(イベントハンドリング)」、「キー修飾子」について

  3. 2018 07.22

    【Vue.js】コンポーネントの「ライフサイクル」、Vueクラスについて

  4. 2020 04.12

    【Vue.js】コンポーネントから「Vuex」を呼び出す。

  5. 2020 04.05

    【Vue.js】「SFC(Single File Components、単一ファイルコンポーネント)」とは?

  6. 2020 06.14

    【Vue.js】「router-link」の詳細仕様

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Vue.js】「SFC(Single File Co…

【Vue.js】コンポーネント実装の際の注意点(elや…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー