0Pricing
Vue Academy · レッスン

GettersとModules

派生状態を計算し、ストアをmodulesに整理します

「GettersとModules」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全3レッスンが含まれています。

ゲッターによる算出状態

フィルタリングされたリストや件数など、派生した状態が必要になることがあります。ゲッターはストアにおけるcomputedプロパティに相当し、状態から値を導出して、依存関係が変わるまで結果をキャッシュします。

ゲッターの定義

ゲッターは状態を受け取り、派生した値を返す関数です。

getters: {
  completedTodos(state) {
    return state.todos.filter(t => t.done)
  }
}

他のゲッターを使うゲッター

ゲッターは、すべての他のゲッターを含む2番目の引数を受け取るため、それらを組み合わせて使えます。

getters: {
  completedTodos(state) {
    return state.todos.filter(t => t.done)
  },
  completedCount(state, getters) {
    return getters.completedTodos.length
  }
}

ゲッターへのアクセス

computedプロパティ内でthis.$store.gettersを通してゲッターを読み取ります。

computed: {
  doneCount() {
    return this.$store.getters.completedCount
  }
}

メソッド形式のゲッター

ゲッターから関数を返すと、引数を渡せます。メソッド形式のゲッターはキャッシュされず、呼び出すたびに実行される点に注意してください。

getters: {
  todoById: (state) => (id) => {
    return state.todos.find(t => t.id === id)
  }
}

// usage
this.$store.getters.todoById(3)

mapGettersヘルパー

mapStateと同様に、mapGettersヘルパーを使うとゲッターが自動的にcomputedプロパティになります。

import { mapGetters } from "vuex"

export default {
  computed: {
    ...mapGetters(["completedTodos", "completedCount"])
  }
}

モジュールに分割する理由

1つの大きなストアは保守が難しくなります。Vuexではストアをモジュールに分割できます。各モジュールが独自の状態、ミューテーション、アクション、ゲッターを持つため、関連するロジックをまとめて管理できます。

モジュールの定義

モジュールは、ストアと同じオプションを持つオブジェクトにすぎません。modulesキーの下にモジュールを登録します。

const cart = {
  state: () => ({ items: [] }),
  mutations: {
    addItem(state, item) { state.items.push(item) }
  },
  getters: {
    itemCount: (state) => state.items.length
  }
}

モジュールの登録

ルートストアのmodulesの下にモジュールをまとめます。各キーがモジュール名になります。

import { createStore } from "vuex"
import cart from "./modules/cart"
import user from "./modules/user"

export const store = createStore({
  modules: { cart, user }
})

モジュールの名前空間

namespaced: trueを設定すると、モジュールに独自のスコープを持たせられます。これによりモジュール間の名前の衝突を避け、構造を明確にできます。

const cart = {
  namespaced: true,
  state: () => ({ items: [] }),
  getters: {
    itemCount: (state) => state.items.length
  }
}

名前空間付きモジュールへのアクセス

名前空間を使用する場合は、ミューテーションのコミット、アクションのディスパッチ、ゲッターの読み取りの際にモジュール名をプレフィックスとして付けます。

// module state lives under the module key
this.$store.state.cart.items

// namespaced getter, mutation, action
this.$store.getters["cart/itemCount"]
this.$store.commit("cart/addItem", item)
this.$store.dispatch("cart/checkout")

理解度チェック

ゲッターとモジュールについての理解度を確認しましょう。

まとめ

ゲッターは状態からキャッシュ可能な値を導出し、this.$store.gettersまたはmapGettersからアクセスします。モジュールは大きなストアを役割ごとの単位に分割します。namespaced: trueを設定するとスコープが分離され、module/nameというプレフィックスでメンバーを指定します。これで、状態、ミューテーション、アクション、ゲッター、モジュールというVuexの主要な機能をすべて学びました。

よくある質問

「GettersとModules」レッスンは無料ですか?

はい。「GettersとModules」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全3レッスンが含まれています。

「GettersとModules」で何を学びますか?

派生状態を計算し、ストアをmodulesに整理します ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。

「GettersとModules」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Vuexの基礎
  2. MutationsとActions
  3. GettersとModules
← Vue Academyに戻る