Я довольно новичок в Vue и недавно копался в Vuex.Я пытаюсь найти через API.Начальный поиск работает как задумано.Однако, если поиск выполняется по другому запросу, поиск выполняется только по тому, что было возвращено ранее.
Например, если я произвел поиск по «ve», то и «Vettel», и «Verstappen» вернутся, как и ожидалось.Однако, если я затем что-то ищу без ранее возвращенных букв, ничего не появляется, например, «Ham», когда поиск Гамильтона впоследствии ничего не возвращает.
Я пытался изменить мутации, но я не уверенгде я иду не так.
Вот компонент:
<template>
<transition
appear
appear-class="fade-enter"
appear-to-class="fade-enter-to"
appear-active-class="fade-enter-active"
>
<div>
<h3>Current Standings</h3>
<input type="text" v-model="searchQuery" v-on:input="search" placeholder="search driver">
<table class="standings">
<thead>
<th>Position</th>
<th>Driver Name</th>
<th>Nationality</th>
<th>Team</th>
<th>Wins</th>
<th>Points</th>
</thead>
<tbody>
<tr v-for="standing in ALL_STANDINGS" :key="standing.position" class="standing">
<td>{{standing.position }}</td>
<td>{{standing.Driver.driverId | last-name | to-title-case}}</td>
<td>{{standing.Driver.nationality | to-title-case}}</td>
<td>{{standing.Constructors[0].constructorId | to-title-case}}</td>
<td>{{standing.wins }}</td>
<td>{{standing.points}}</td>
</tr>
</tbody>
</table>
</div>
</transition>
</template>
<script>
import styles from "../styles/styles.scss";
import { mapState, mapGetters, mapActions, mapMutations } from "vuex";
export default {
name: "CurrentStandings",
data() {
return {
searchQuery: ""
};
},
created() {
this.fetchStandings();
},
mounted() {
this.created = true;
},
computed: {
...mapState(["standings", "filter"]),
...mapGetters(["ALL_STANDINGS", "GET_SEARCH", "FILTERED_SEARCH"])
},
methods: {
...mapActions(["fetchStandings"]),
...mapMutations(["SET_SEARCH", "SET_FILTER"]),
search: function() {
// set SEARCH to input
this.$store.commit("SET_SEARCH", this.searchQuery);
// return matches between ALL_STANDINGS and SEARCH
this.SET_FILTER(
this.ALL_STANDINGS.filter(standing => {
return standing.Driver.driverId.match(this.GET_SEARCH);
})
);
}
}
};
</script>
, а вот модуль standings.js:
import axios from 'axios';
const state = {
standings: [],
filter: [],
search: '',
};
const getters = {
/* eslint no-shadow: ["error", { "allow": ["state"] }] */
ALL_STANDINGS: state => state.standings,
FILTERED_STANDINGS: state => state.filter,
GET_SEARCH: state => state.search,
};
const mutations = {
SET_STANDINGS: (state, standings) => (state.standings = standings),
SET_SEARCH: (state, search) => (state.search = search),
SET_FILTER: (state, filter) => (state.standings = filter),
RESET_STANDINGS: (state, standings) => (state.filter = standings),
};
const actions = {
async fetchStandings({ commit }) {
const response = await axios.get('https://ergast.com/api/f1/current/driverStandings.json');
commit('SET_STANDINGS', response.data.MRData.StandingsTable.StandingsLists[0].DriverStandings); // response.data is passed to 'standings' in the mutation (2nd arg)
},
};
Любая помощь будет принята с благодарностью!Спасибо:)