簡単なVueブログを考えてください:
Vuexをデータストアとして使用しています。2つの getters を設定する必要があります。IDでgetPost
を取得するためのpost
ゲッターと、各特集記事の最初の数文字を返すlistFeaturedPosts
。注目の投稿リストのデータストアスキーマは、投稿をIDで参照します。これらのIDは、抜粋を表示するために、実際の投稿に解決する必要があります。
store/state.js
export const state = {
featuredPosts: [2, 0],
posts: [
'Lorem et ipsum dolor sit amet',
'Lorem et ipsum dolor sit amet',
'Lorem et ipsum dolor sit amet',
'Lorem et ipsum dolor sit amet',
'Lorem et ipsum dolor sit amet',
]
}
store/getters.js
export default getPost = (state) => (postID) => {
return state.posts[postID]
}
export default listFeaturedPosts = (state, getters) => () => {
console.log(getters) // {}
return state.featuredPosts.map(postID => getters.getPost(postID).substring(0, EXCERPT_LENGTH);
}
store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import * as getters from './getters'
import * as mutations from './mutations'
Vue.use(Vuex)
export default new Vuex.Store({
state,
getters,
mutations
})
ドキュメントによると、getters
パラメーターを使用して他のゲッターにアクセスできます。ただし、getters
の中からlistFeaturedPosts
にアクセスしようとすると、空になり、getters.getPost
がそのコンテキストで未定義であるため、コンソールにエラーが表示されます。
上の例でgetPost
の中からlistFeaturedPosts
をVuexゲッターとして呼び出すにはどうすればよいですか?
アンジーの答えは近い…。
VueJS 2.0では、state
とgetters
を渡します。したがって、これはstore/getters.jsで動作するはずです。
export default foo = (state, getters) => {
return getters.yourGetter
}
state
なしでテストしましたが、vuejs 2.5.16では動作しませんでした。 state
が必要な理由です。
これは動作します:
export default foo = (state, getters) => {
return getters.yourGetter
}
これはうまくいきませんでした
export default foo = (getters) => {
return getters.yourGetter
}
getters
を2番目の引数として渡し、ローカルおよび非名前空間のゲッターにアクセスします。名前空間付きモジュールの場合、rootGetters
を使用する必要があります(別のモジュール内で定義されたゲッターにアクセスするには、4th引数として):
export default foo = (state, getters, rootState, rootGetters) => {
return getters.yourGetter === rootGetters['moduleName/getterName']
}
ゲッターは他のゲッターを2番目の引数として受け取ります
getters: {
doneTodos: state => {
return state.todos.filter(todo => todo.done)
},
doneTodosCount: (state, getters) => {
return getters.doneTodos.length
}
}
ここに公式ドキュメントへのリンクがあります- https://vuex.vuejs.org/guide/getters.html#property-style-access