nuxt中vuex如何模块化分

最近在学习nuxt框架,学到了vuex这一块,nuxt将vuex内置了,所以在模块划分时和vue的spa项目略有区别。

 

 

 照着官网例子写了一下,感觉少了什么?大名鼎鼎的getters模块哪了,于是自己尝试了几次,终于把getters模块整出来了。话不多说,上例子

store文件的目录结构

 

 

 可以看到store文件夹下有三个文件,nuxt将store下的每个js文件当成一个modules去构建,不必有传统的index.js因为store目录下的每一个js文件,nuxt都会把它当成模块。

下面来看看test1.js也就是test1模块

export const state=()=>({
    test1State:"test1State"
})
export const mutations={
    settest1State(state,val){
        state.test1State=val;
    }
}
export const actions={
    ayncTest(context){
        context.commit(settest1State,"asynctest1")
    }
}

可以看到,和传统的代码格式略有不同,state都是一个函数的形式暴露出来的,而且每个模块只暴露出state、mutations、actions三个模块,唯独不暴露getters模块,因为getters模块需要单独一个文件暴露

出来。

再看一下test2.js也就是test2模块

export const state=()=>({
    test2State:"test2State"
})
export const mutations={
    settest2State(state,val){
        state.test2State=val;
    }
}
export const actions={
    ayncTest(context){
        context.commit(settest2State,"asynctest2")
    }
}

和test1一样一样的,以后在nuxt中划分vuex模块就这样划分即可

在来看看getters.js模块,这个比较特殊:

const getters ={
    test1State:state=> state.test1.test1State,
    test2State:state=>state.test2.test2State
}
export default getters;

以上就是nuxt中vuex的模块划分,

在页面中尝试了一下调用方式,是否和传统的一样:

首先引入:

import { mapGetters,mapState } from "vuex";
在计算属性中
computed: {
    ...mapGetters([
      "test1State",//页面配置信息
      "test2State"//
    ]),
  },

然后在页面中就可以随意使用test1State、test2State变量了,

当然不通过mapGetters也是可以获取到每个模块中的值的,

如果不借用mapGetters,那么自然没必要在页面中引入vuex了,可以把那一句去掉了。

还是在计算属性中,可以这样写:

computed: {
    ...mapGetters([
      "test1State", //页面配置信息
    ]),
    test2State(){
      return this.$store.state.test2.test2State
    }
  },

 在页面中调用某一模块的actions里的方法:

mounted() {
    this.$store.dispatch("test1/ayncTest")
  },

好了,以上就是nuxt的vuex模块划分。

 

 

 

 

 

 

posted @ 2020-05-02 21:25  古墩古墩  Views(1486)  Comments(0Edit  收藏  举报