質問
がどのように私はmapGetters
内部getter
に引数を渡すことができる引数を受け取るmapGettersスルー状態の変更に反応しますか? widgetFetched.posts
とposts
の状態変化に同時に反応するのは正しいですか?言い換えれば、私のgetter
はこれらの変更に反応できますか?私は私のコンポーネントを作成しようとしている VueJS:
説明getter
を通して私のVuex Store
でState
の変化に反応します。これを実現するには、私のコンポーネントの内部にmapGetters
を使用しています。しかし、このgetter
は、私の状態をフィルタリングする引数(id
)を受け取ります(これは平坦化されています)。
私は2つの状態(辞書である):widgetsFetched
とposts
を持っています。 1つのwidgetFetched
にはposts
という名前のプロパティがあり、その配列はPost.Id
です。状態posts
は、キーがPost.Id
の辞書です。
したがって、私はgetter
getPostsByWidgetId
と呼ばれ、1つの引数widgetId
が必要です。次に、getter
はwidgetFetched.posts
のIDでフィルタリングされた投稿を含む配列を返します。
ストア
const store = new Vuex.Store({
state: {
widgetsFetched: {
1: { id: 1, done: true, posts: [1, 2, 3, 4] },
2: { id: 2, done: false, posts: [5, 6] }
},
posts: {
1: { name: '...', id: 1, content: '...' },
2: { name: '...', id: 2, content: '...' },
3: { name: '...', id: 3, content: '...' },
4: { name: '...', id: 4, content: '...' },
5: { name: '...', id: 5, content: '...' },
6: { name: '...', id: 6, content: '...' }
}
},
getters: {
getPostsByWidgetId: (state, getters) => (widgetId) => {
if (widgetId && state.widgetsFetched[widgetId] && state.widgetsFetched[widgetId].posts) {
return state.widgetsFetched[widgetId].posts.map((postId) => {
return state.posts[postId]
})
}
}
}
})
コンポーネント
私のコンポーネントは次のようになります。
<template>
<div>
<p v-for="post in posts(this.widget._id)" >{{ post.id }} - {{ post.score }}</p>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
name: 'reddit',
props: ['widget'],
computed: {
...mapGetters({
posts: 'getPostsByWidgetId'
})
}
}
</script>
<style scoped>
</style>