Кажется, в вашем фрагменте отсутствует какой-то код: как fetchEvent
имеет доступ к state
и getters
? Обычно действия Vuex получают state
и getters
через их первый аргумент.
Я взял ваш код, поместил его в простой шаблон Vuex, немного изменил его рефакторинг и это работает, как и следовало ожидать.
Vue.component('event', {
template: '<div></div>',
created() {
this.$store.dispatch('fetchEvent', 1);
},
});
const store = new Vuex.Store({
state: {
events: [{
id: 1
},
{
id: 2
},
{
id: 3
},
]
},
actions: {
fetchEvent({
commit,
state,
getters,
}, id) {
var event = getters.getEventById(id)
console.log('getter:', event)
console.log('local find:', state.events.find(event => event.id === id))
}
},
getters: {
getEventById: state => id => {
return state.events.find(event => event.id === id)
}
}
})
const app = new Vue({
store,
el: '#app'
})
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vuex"></script>
<div id="app">
<event></event>
</div>