Если вы используете полученные данные во многих компонентах, вы должны хранить их в состоянии с использованием мутации. Если вы используете данные в определенном компоненте, но не хотите получать их непосредственно от компонента и можете поместить этот вызов в отдельный js -модуль в папке api, где размещаются все такие запросы.
Обновление:
Это пример js -модуля из папки api: items. js
import axios from 'axios'
export default {
async getItems (options) {
const { data: result } = await axios.post('/api/items', options)
return result
}
}
Использование: MyComponent. vue
import itemsApi from '@/api/items'
...
export default {
...
data () {
return {
items: []
}
},
methods: {
async loadItems() {
this.items = await itemsApi.getItems({})
}
}
Если вы хотите использовать этот API в нескольких компонентах с помощью sh, вы можете создать mixin с помощью этой функции loadItems.
Это пример действия и мутации элементы модуля состояния. js:
import itemsApi from '@/api/items'
const GET_ITEMS = 'GET_ITEMS'
const state = {
items: []
}
const actions = {
async getItems ({ commit }, params) {
const items = await itemsApi.getItems(params)
commit(GET_ITEMS, items)
},
}
const mutations = {
[GET_ITEMS] (state, items) {
state.items = items
}
}
export default {
namespaced: true,
state,
actions,
mutations
}
Использование:
MyComponent. vue
<script>
import { mapActions, mapState } from 'vuex'
...
export default {
...
computed: {
...mapState({
items: state => state.items.items
}),
},
methods: {
...mapActions({
getItems: 'items/getItems',
}),
async loadItems() {
await this.getItems({})
// now you have the loaded items in this.items
}
}