Comment appeler un getter d'un autre getter à Vuex?

Envisager une simple Vue blog:

J'utilise Vuex comme datastore et j'ai besoin d'en configurer deux getters:getPost getter pour la récupération d'un post par ID, ainsi que d'un listFeaturedPosts qui renvoie les premiers caractères de chaque article sélectionné. Le schéma de datastore pour la liste des billets présentés renvoie aux billets par leur IDs. Ces ID doivent être résolus à des postes réels aux fins de montrer la extrait.

magasin/de l'état.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',
  ]
}

magasin / 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);
}

magasin/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
})

selon la documentation, le getters paramètre peut être utilisé pour accéder à d'autres méthodes. Cependant, lorsque j'essaie d'accéder à getters à partir de listFeaturedPosts, c'est vide, et je reçois une erreur dans la console due à getters.getPost être indéfini dans ce contexte.

Comment dois-je appeler getPost comme un getter Vuex de l'intérieur listFeaturedPosts dans l'exemple ci-dessus?

13
demandé sur Billal Begueradj 2017-09-14 06:35:17

3 réponses

la réponse D'Angie est proche....

Dans VueJS 2.0, vous passerez state et getters. Cela devrait donc fonctionner en magasin / getters.js:

export default foo = (state, getters) => {
    return getters.yourGetter
}
31
répondu whusterj 2017-12-06 16:42:32

j'ai Testé sans state est nécessaire.

ceci fonctionne:

export default foo = (state, getters) => {
    return getters.yourGetter
}

cela n'a pas fonctionné

export default foo = (getters) => {
    return getters.yourGetter
}
3
répondu Jose Seie 2018-05-08 06:03:32

au lieu de passer état, pass getters puis appelez n'importe quel autre getter que vous voulez. Espérons que cela aide.

export default foo = (getters) => {
   return  getters.anyGetterYouWant
}
0
répondu Angie 2017-11-08 10:20:28