Vuex突变似乎并没有在加载时更新状态

时间:2019-03-04 23:54:16

标签: vue.js vuejs2 vuex vue-cli

所以我在页面加载时提交了一个突变,但是它似乎并没有更新状态,但是如果我在页面上提交了相同的突变,它就可以正常工作。在页面加载后无法准备更新的状态下,我是否缺少某些东西?

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
    })

1 个答案:

答案 0 :(得分:2)

您需要将商店传递到您的应用实例。

import store from './store' // correct path to your store

new Vue({
  router,
  store,  <---
  // ...
})

我不明白为什么您将Vue应用包装在setTimeout中。

我建议您阅读Vuex文档。您正在变异中进行异步工作,其中这种事情属于action