Vue.js/vuex ajax 用 ajax 状态更新组件
Vue.js/vuex ajax update components with ajax state
我在 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 总是 returns 空数组,因为商店中的 userData 尚未完成。我有几十种方法执行各种计算,都是基于这个数组,所以如果一个失败,它们都会失败。
也许我的方法是错误的,但理想情况下我希望数据属性在商店更新后更新?我尝试使用计算属性来执行此操作,并且可以很好地使用 {{ whatever }},但不确定如何更新组件数据。
你走在正确的道路上。计算属性绝对是去这里的方式。
在您当前的情况下,您的组件以任何反应方式对商店一无所知。你只是有一个函数试图在任何给定点读出数据,正确的数据可能存在也可能不存在。
所以首先,如果组件嵌套在父组件下,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 语法,因为它使内容更具可读性,并且某些部分更清晰 :)
我在 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 总是 returns 空数组,因为商店中的 userData 尚未完成。我有几十种方法执行各种计算,都是基于这个数组,所以如果一个失败,它们都会失败。
也许我的方法是错误的,但理想情况下我希望数据属性在商店更新后更新?我尝试使用计算属性来执行此操作,并且可以很好地使用 {{ whatever }},但不确定如何更新组件数据。
你走在正确的道路上。计算属性绝对是去这里的方式。 在您当前的情况下,您的组件以任何反应方式对商店一无所知。你只是有一个函数试图在任何给定点读出数据,正确的数据可能存在也可能不存在。
所以首先,如果组件嵌套在父组件下,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 语法,因为它使内容更具可读性,并且某些部分更清晰 :)