将Vuex与Nuxt.js结合使用-正确的方法

时间:2020-06-21 21:46:33

标签: javascript vue.js vuex nuxt.js

我尝试将Vuex添加到我的Nuxt.js项目中。我创建了一个自定义ligthbox,并共享所有页面,并将代码写入默认的布局页面。

在页面上,要隐藏或显示ligthbox,我需要更改状态值。这是所有进入“存储”文件夹的模块:

// state.js
export const state = () => ({
    lightbox: false,
});
// getters.js
export const getters = {
    getLightbox(state)
    {
        return state.lightbox
    },
}
// actions.js
export const actions = {
    showLightbox({commit})
    {
        commit('UPDATE_LIGHTBOX', true)
    },
    hideLightbox({commit})
    {
        commit('UPDATE_LIGHTBOX', false)
    },
}
// mutations.js
export const mutations = {
    UPDATE_LIGHTBOX(state,value)
    {
        state.lightbox = value
    },
}

然后,当我尝试从方法中调用“ this。$ store.state.lightbox”时,出现500错误:

TypeError: Cannot read property 'getters' of undefined

即使我尝试使用这种方式,也会遇到相同的错误:

import { mapGetters } from 'vuex'
export default {
    computed: {
        ...mapGetters(['getLightbox']),
        lightboxState()
        {
            return this.getLightbox
        },
    }
    mounted()
    {
        console.log( this.lightboxState )
    }
}

稍后我尝试使用asyncData,但控制台会打印“ undefined”值:

export default {
    asyncData({ store })
    {
        console.log('Store =',store);
    }
}

那么,将Vuex与Nuxt.js一起使用的正确方法是什么?也许我需要在“ nuxt.config.js”中添加其他内容?

1 个答案:

答案 0 :(得分:1)

如果您为state.jsgetters.jsmutations.jsactions.js使用单独的文件,则它们应该只有一个默认导出。

所以不是

// getters.js
export const getters = ...

您应该使用

// getters.js
export default {
  getLightbox: state => state.lightbox
}

这适用于您的store目录中的所有文件。

请参见https://nuxtjs.org/guide/vuex-store/#modules-mode