vuejs2 - type - ¿Cómo llamo a un captador de otro captador en Vuex?
vuex map store (3)
Considera un simple blog de Vue:
Estoy usando Vuex como mi almacén de datos y necesito configurar dos captadores: un captador getPost
para recuperar una post
por ID, así como una lista de listFeaturedPosts
que devuelve los primeros caracteres de cada publicación destacada. El esquema del almacén de datos para la lista de publicaciones destacadas hace referencia a las publicaciones por sus ID. Estas identificaciones deben resolverse en publicaciones reales con el fin de mostrar los extractos.
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'',
]
}
tienda / 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
})
Según la documentación, el parámetro getters
se puede utilizar para acceder a otros getters. Sin embargo, cuando intento acceder a los listFeaturedPosts
desde dentro de listFeaturedPosts
, está vacío y listFeaturedPosts
un error en la consola debido a que getters.getPost
no está definido en ese contexto.
¿Cómo llamo a getPost
como Vuex getter desde dentro de listFeaturedPosts
en el ejemplo anterior?
La respuesta de Angie es cercana ...
En VueJS 2.0, pasará el state
y getters
. Así que esto debería funcionar en store / getters.js :
export default foo = (state, getters) => {
return getters.yourGetter
}
Probé sin state
y no funcionó en vuejs 2.5.16. Es por eso que el state
es necesario.
esto funciona:
export default foo = (state, getters) => {
return getters.yourGetter
}
esto no funcionó
export default foo = (getters) => {
return getters.yourGetter
}
en lugar de pasar el estado , pase a los captadores y luego llame a cualquier otro captador que desee. Espero eso ayude.
En tu tienda / getters.js
export default foo = (getters) => {
return getters.anyGetterYouWant
}