所以我在页面加载时提交了一个突变,但是它似乎并没有更新状态,但是如果我在页面上提交了相同的突变,它就可以正常工作。在页面加载后无法准备更新的状态下,我是否缺少某些东西?
main.js:
new Vue({
router,
store,
jQuery,
el: '#app',
mounted() {
store.dispatch('getImages');
},
render: h => h(App)
});
Store.js
const state = {
images: []
};
const getters = {
getImages: (state) => {
return state.images;
}
};
const mutations = {
getImages: (state, payload) => {
let that = this;
$client.getSpace(process.env.VUE_APP_CONTENTFUL_SPACE_ID)
.then((Environment) => {
Environment.getAssets()
.then((assets) => {
let images = [];
assets.items.forEach(function (item) {
if (!item.fields.title['en-US'].includes('About')) {
images.push(item.fields.file['en-US'].url);
}
});
Vue.set(state, 'images', images);
localStorage.images = JSON.stringify(images);
});
});
},
};
const actions = {
getImages({ commit }) {
setTimeout(function () {
commit('getImages')
}, 500)
}
};
export default new Vuex.Store({
state,
mutations,
getters,
actions
})
答案 0 :(得分:2)
您需要将商店传递到您的应用实例。
import store from './store' // correct path to your store
new Vue({
router,
store, <---
// ...
})
我不明白为什么您将Vue应用包装在setTimeout中。
我建议您阅读Vuex文档。您正在变异中进行异步工作,其中这种事情属于action。