Я борюсь с Vue.js, поэтому мне нужна ваша помощь.
Я хочу сделать что-то слишком простое, но, к сожалению, без удачи.В store.js у меня есть выборка axios, которая возвращает данные из вызываемого API.Мой следующий шаг - передать объект в компонент.
Мне удалось это сделать с помощью этого. $ Store.dispatch ('loadBeers') и мутации, и я могу отобразить элементы в моем html.
НО, что если я захочу обработать данныев компоненте helloworld, например, чтобы сделать нумерацию страниц и отфильтровать объект?Моя логика говорит мне, что мне нужно сохранить объект в новом массиве, и после того, как я смогу обработать свои данные.
Как я могу перенести this.myBeers в компонент helloworld?Может быть, моя логика или мой подход не верны, поэтому, пожалуйста, прости меня, у меня есть опыт только с экземпляром, но вся фреймворк - это другой мир ...
Извините за мой ужасный английский, я стараюсь улучшать их каждыйдень.заранее спасибо сообществу ..
Store.js
import Vue from "vue";
import Vuex from "vuex";
import axios from "axios";
import VueAxios from "vue-axios";
Vue.use(Vuex);
Vue.use(VueAxios, axios);
export default new Vuex.Store({
state: {
beers: []
},
data(){
return{
myBeers:[],
}
},
actions: {
loadBeers({ commit }) {
axios
.get("https://api.punkapi.com/v2/beers")
.then(r => {
this.myBeers = r.data;
console.log(this.beers);
})
.then(beers => {
commit("SET_BEERS", beers);
});
}
},
mutations: {
SET_BEERS(state, beers) {
state.beers = beers;
}
}
});
<template>
<div class="container">
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr v-for="beer in beers" :key="beer.id">
<td>{{ beer.id }}</td>
<td>{{ beer.name }}</td>
<td>{{ beer.abv }}</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'HelloWorld',
data(){
return{
myBeers:[],
}
},
mounted () {
this.$store.dispatch('loadBeers')
this.myBeers=this.$store.dispatch('loadBeers')
},
computed: mapState([
'beers'
]),
methods:{
test(){
console.log(this.loadBeers);
}
}
}
</script>