我正在使用带有vuex的vue webpack模板,我基本上遇到了没有用状态更新的组件的问题。
我有一家商店
const state = {
userData: {},
}
在我的应用中,我有一个方法
methods: {
addUserData: function() {
const that = this;
axios.get('URL').then(function (response) {
let obj = response.data;
that.$store.commit('addUserData', {obj});
});
},
我挂电话时打电话
mounted () {
this.addUserData();
},
使用突变更新
const mutations = {
addUserData(state, {obj}) {
state.userData = obj;
},}
这里的一切都很好,数据进入商店很好。但后来我有一个不起作用的组件,因为它不是在等待ajax完成加载,也不是以任何方式绑定。我可能在这里做错了,但基本上我的组件
data () {
return {
weekData : {
weekDataList: []....
methods: {
tester: function(a) {
// Sorting the userdata using lowdash
this.weekData.weekDataList = _.values(this.$store.state.userData);
},
},
我以与之前相同的方式称呼它
mounted () {
this.tester();
},
问题是this.weekData.weekDataList总是返回一个空数组,因为商店中的userData尚未设法完成。我有几十种执行各种计算的方法,都是基于这一个数组,所以如果一个失败,它们都会失败。
也许我的方法是错误的,但理想情况下,我想在商店更新后更新数据属性?我尝试使用计算属性执行此操作,并与{{whatever}}一起正常工作,但不确定如何更新组件数据。
答案 0 :(得分:1)
首先,如果组件嵌套在父组件下,因为它似乎是this.$store
将指向同一个商店。然后,您应该尝试将所需的值用作属性,因此它是被动的。
computed: {
userData: function () {
return this.$store.state.userData
}
}
当你在它上面时,也将周数据输入计算属性:
computed: {
userData: function () {
return this.$store.state.userData
},
weekData: function () {
return {
weekDataList: _.values(this.userData)
}
}
}
通过这样做,所有数据都将被激活,weekData
将相应更新。
希望这有帮助,一般来说,当你使用Webpack时,我会考虑开始使用ES6语法,因为它使事情更具可读性,而且某些部分更清洁:)