react & vue & angular

Vuex模块化

2022-06-13  本文已影响0人  itfitness

目录

配置

在src目录下新建store文件夹,内部新建add.js、cut.js和index.js


add.js:其中主体的配置项与之前的这篇文章:Vuex的使用
差不多,这里主要多了一个namespaced,这个翻译成中文就是命名空间,主要是用来区分各个模块的
export default {
    //开启命名空间
    namespaced:true,
    actions:{
        add(ctx,value){
            //交给mutations处理
            ctx.commit("ADD",value)
        }
    },
    mutations:{
        ADD(state,value){
            //操作数据
            state.num += value
        }
    },
    state:{
        num:0
    },
    getters:{
        bigNum(state){
            return state.num * 10
        }
    }
}

cut.js:整体与add.js差不多

export default {
    //开启命名空间
    namespaced:true,
    actions:{
        cut(ctx,value){
            //交给mutations处理
            ctx.commit("CUT",value)
        }
    },
    mutations:{
        CUT(state,value){
            //操作数据
            state.num -= value
        }
    },
    state:{
        num:0
    },
    getters:{
        bigNum(state){
            return state.num * 10
        }
    }
}

然后在index.js中引入add.js和cut.js,其中addModulecutModule就是用来区分模块的命名

import Vue from "vue"
import Vuex from "vuex"
import addOptions from "./add.js"
import cutOptions from "./cut.js"

Vue.use(Vuex)

export default new Vuex.Store({
    modules:{
        addModule:addOptions,
        cutModule:cutOptions
    }
})

使用

使用的话我们依然使用映射来操作,但是之前的文章(Vuex的getters、mapGetters、mapState、mapActions与mapMutations的使用)不同,这次需要加上配置的名字来区分,如下:
Add.vue

<template>
    <div>
        <h1>当前数值:{{num}}</h1>
        <h1>当前数值乘以十:{{bigNum}}</h1>
        <button @click="add(1)">点击加</button>
    </div>
</template>

<script>
    import {mapActions,mapState,mapGetters} from "vuex"
    export default{
        computed:{
            ...mapState("addModule",['num']),
            ...mapGetters("addModule",['bigNum'])
        },
        methods:{
            ...mapActions("addModule",['add'])
        }
    }
</script>

<style>
</style>

Cut.vue

<template>
    <div>
        <h1>当前数值:{{num}}</h1>
        <h1>当前数值乘以十:{{bigNum}}</h1>
        <button @click="cut(1)">点击减</button>
    </div>
</template>

<script>
    import {mapActions,mapState,mapGetters} from "vuex"
    export default{
        computed:{
            ...mapState("cutModule",['num']),
            ...mapGetters("cutModule",['bigNum'])
        },
        methods:{
            ...mapActions("cutModule",['cut'])
        }
    }
</script>

<style>
</style>

然后在App.vue 引入使用

<template>
  <div>
    <Add></Add>
    <hr/>
    <Cut></Cut>
  </div>
</template>

<script>
import Add from './components/Add.vue'
import Cut from './components/Cut.vue'
export default {
  name: 'app',
  components: {
    Add,
    Cut
  }
}
</script>

<style>
</style>

运行效果如下


上一篇 下一篇

猜你喜欢

热点阅读