Vuex模块化

作者: itfitness | 来源:发表于2022-06-13 11:47 被阅读0次

目录

配置

在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>

运行效果如下


相关文章

  • 模块化vuex,获取、设置数据,及刷新保留数据方法

    前言 1.模块化vuex2.获取vuex中的数据3.设置vuex中的数据4.刷新之后,保留数据 模块化vuex 数...

  • VUEX模块化

    vuex模块化官方文档 项目github地址 在vuex的官网上,关于模块化和热重载的文档都是蛮详细的,这边也就不...

  • vuex相关文章

    vuex模块化和命名空间的实例代码

  • vuex持久化+模块化实战用法(进阶篇)

    上一篇:vuex刷新数据消失不见解决方案 Vuex模块化 模块化后的 store 大概长这样,如果画的不对,欢迎留...

  • vuex入门实例2

    vuex入门实例2 这章节我准备以requirejs模块化,讲解下如何快速上手vuex 源码地址 工程代码结构如下...

  • 2018-03-13

    Vuex 进阶——模块化组织 Vuex 前两篇讲解了一下 Vuex 的基本使用方法,可是在实际项目中那么写肯定是不...

  • vuex模块化

    上一节[https://www.jianshu.com/p/5dd561f3570d] modules modul...

  • vuex模块化

    demo store/modules/user.js 可以通过添加 namespaced: true 的方式使其成...

  • vuex模块化

    App.vue Count.vue Person.vue index.js count.js(只写count相关逻...

  • Vuex模块化

    目录 配置 在src目录下新建store文件夹,内部新建add.js、cut.js和index.js 其中主体的配...

网友评论

    本文标题:Vuex模块化

    本文链接:https://www.haomeiwen.com/subject/xeromrtx.html