【发布时间】:2018-03-04 06:15:56
【问题描述】:
对于找到一个我认为对于 Vuex 之类的东西来说非常常见的用例的示例,我感到很沮丧。
我在 store 上调度异步操作以通过 api 填充它。填充此商店后,我需要执行某些操作。
我遇到的每个 Vuex 示例似乎都只是处理 UI 的直接更新。但几乎在所有情况下,我还需要执行基于关键组件的操作。
state: {
// initial state values are all falsey
id: false,
name: false,
},
getters: {
getItem: (state) => {
return state;
},
},
actions: {
setItem({commit}) {
// async call to get and then commit the state
}
}
上面是 item store 的相关 sn-p 一个非常简单的示例,其中调度操作的调用通常是从此处未详细说明的组件调用的。下面是我正在监视要填充的项目的组件。
watch: {
item: function (newItem) {
this.doSomethingWith(newItem); // this never runs
}
},
computed: {
...mapGetters({
item: 'getItem',
}),
},
mounted() {
console.log(this.item); // I get an observer of the item object
// none of items state properties are defined during mounted
},
methods: {
doSomethingWith(item) {
// I want to do something here with the set item!!
}
}
我希望不会在挂载时设置项目状态,因为它是对外部 api 的异步调用。然而,我所期望的是,当它最终被填充时,观察者会捕捉到它并允许我在组件内运行后续操作。但是手表永远不会触发。
那么我如何跟踪组件中的此类更改并根据其新状态运行操作?
【问题讨论】:
-
您已将
item映射到getItemgetter,但您的示例有一个getUnitgetter。 -
这是一个错字 - 我正在从现有应用程序中复制代码并尝试使其更通用。我已经更新了问题。
标签: javascript asynchronous vue.js vuejs2 vuex