Я читал несколько похожих вопросов об этом здесь и в других местах, но я не могу понять это.
У меня есть форма с mapGetters
и входными значениями, которые должны обновляться в зависимости от состояния Vuex:
...mapGetters({
show: "getShow"
}),
пример ввода формы (я использую Bootstrap Vue):
<b-form-input
id="runtime"
name="runtime"
type="text"
size="sm"
v-model="show.runtime"
placeholder="Runtime"
></b-form-input>
Тогда у меня есть этот метод на компоненте формы:
async searchOnDB() {
var showId = this.show.showId;
if (!showId) {
alert("Please enter a showId");
return;
}
try {
await this.$store.dispatch("searchShowOnDB", showId);
} catch (ex) {
console.log(ex);
alert("error searching on DB");
}
},
и это действие в магазине:
async searchShowOnDB({ commit, rootState }, showId) {
var response = await SearchAPI.searchShowOnDB(showId);
var show = {
show_start: response.data.data.first_aired,
runtime: response.data.data.runtime,
description: response.data.data.overview
};
//I'm updating the object since it could already contain something
var new_show = Object.assign(rootState.shows.show, show);
commit("setShow", new_show);
}
мутация:
setShow(state, show) {
Vue.set(state, "show", show);
}
searchAPI:
export default {
searchShowOnDB: function (showId) {
return axios.get('/search/?id=' + showId);
},
}
Все работает, вызов API выполнен, Я даже могу видеть обновленное состояние Vuex в Vue Devtools, но форма не обновляется. Как только я что-то пишу в поле ввода или нажимаю commit
в Vue Devtools, поля формы show_start
, runtime
, description
все обновляются.
Кроме того, это работает правильно и обновляет все:
async searchShowOnDB({ commit, rootState }, showId) {
var show = {
show_start: "2010-03-12",
runtime: 60,
description: "something"
};
//I'm updating the object since it could already contain something
var new_show = Object.assign(rootState.shows.show, show);
commit("setShow", new_show);
}
Я не знаю, что еще делать, я попытался явным образом разрешить Promises, удалить async / await и использовать axios.get(...).then(...)
, перемещая вещи ... кажется, ничего не работает .