@jakayla
Вы можете вызвать action используя dispatch:
1
|
this.$store.dispatch('actionName', payload) |
payload - это необязательный параметр, который может быть передан в action.
Чтобы вернуть значение getters, используйте mapGetters в компоненте:
1 2 3 4 5 6 7 |
import { mapGetters } from 'vuex' export default { computed: { ...mapGetters(['getterName']) } } |
Теперь вы можете использовать значение getters, как обычный свойство компонента:
1
|
this.getterName
|
@jakayla
Вот пример более полной реализации использования actions и getters в Vuex:
В файле store.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
value: null
},
mutations: {
setValue(state, value) {
state.value = value
}
},
actions: {
fetchData({ commit }) {
return new Promise((resolve, reject) => {
// Выполнение асинхронного запроса
// Здесь можно вызывать API, получать данные и обновлять состояние в хранилище через mutations
setTimeout(() => {
const data = 'some data'
commit('setValue', data)
resolve()
}, 1000)
})
}
},
getters: {
getValue: state => state.value
}
})
export default store
|
В компоненте, где вы хотите вызвать action и получить значение getters:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<template>
<div>
<button @click="fetchData">Запросить данные</button>
<p>{{ value }}</p>
</div>
</template>
<script>
import { mapGetters, mapActions } from 'vuex'
export default {
computed: {
...mapGetters(['getValue']),
value() {
return this.getValue
}
},
methods: {
...mapActions(['fetchData'])
}
}
</script>
|
В данном примере, при нажатии на кнопку "Запросить данные", вызывается action "fetchData", который выполняет асинхронный запрос и обновляет состояние хранилища через mutation "setValue". Значение из getters "getValue" получается и отображается в компоненте.