我已经在这里和其他地方阅读了多个类似的问题,但我无法弄清楚。
我有一个表单,其中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);
}
搜索API:
export default {
searchShowOnDB: function (showId) {
return axios.get('/search/?id=' + showId);
},
}
一切正常,API 调用被执行,我什至可以在 Vue Devtools 中看到 Vuex 更新状态,但表单没有更新。只要我在输入字段中写入内容或在 Vue Devtools 中点击,commit表单字段show_start,都会更新。runtimedescription
此外,这可以正常工作并更新所有内容:
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 和 use axios.get(...).then(...),移动东西......似乎没有任何效果。