【发布时间】:2019-02-10 11:41:11
【问题描述】:
我有以下组件,其中有一个 theme 计算属性。计算属性的set 函数执行一个名为setTheme 的Vuex 操作,该操作返回一个promise 并更新Vuex 状态下的theme 属性。
<template>
<div>
<input id="light-theme-radio" v-model="theme" type="radio" value="light">
<label for="light-theme-radio">Light</label>
<input id="dark-theme-radio" v-model="theme" type="radio" value="dark">
<label for="dark-theme-radio">Dark</label>
</div>
</template>
<script>
import Vue from "vue";
import { createNamespacedHelpers } from "vuex";
const { mapActions } = createNamespacedHelpers("theme");
export default {
computed: {
theme: {
get() {
return this.$store.state.theme.theme;
},
set(value) {
this.setTheme(value);
}
}
},
methods: {
...mapActions(["setTheme"])
}
};
</script>
问题是theme.get 计算属性在setTheme 完成以使用新选择的项目更新单选按钮后没有被调用。使用异步设置器时,解决此问题的最佳方法是什么。这就是我的 Vuex 的样子:
export const state = {
theme: "light"
};
export const mutations = {
theme: (s, p) => (s.theme = p)
};
export const actions: ActionTree = {
async setTheme(context, theme) {
context.commit("theme/theme", theme);
// ...omitted
await Timer.delay(750);
// ...omitted
}
};
const mainModule = {
actions,
getters,
mutations,
namespaced: true,
state
};
export default mainModule;
const modules = {
other: otherModule,
theme: themeModule
};
const store = new Store({
modules,
});
export default store;
【问题讨论】:
-
在等待promise解决期间,你要渲染什么?
标签: javascript vue.js async-await vue-component vuex