Vue/Vuex ( modules )介绍、命名空间namespaced命名空间时注意事项、命名空间时提交模块中的mutation

一. modules

语法:

// 定义 

const moduleA = {

 state: {

name="张三",

age:18

},

 mutations: { ... },

 actions: { ... },

 getters: { ... }

 }

const moduleB = {  

state: { ... },

 mutations: { ... },

 actions: { ... }

 }

onst store = new Vuex.Store({

    // namespaced为true,则在使用mutations时,就必须要加上模块名

  namespaced:true,

 modules: {  

  moduleA,

   moduleB

})

// 接收

$store.state.模块名.xxx

介绍: 由于使用单一状态树 应用的所有的状态会集中到一个比较大的对象 当应用变得非常复杂时 store对象就有可能变得相当臃肿 为了解决问题 vuex允许将store分割成模块 (module) 每个模块拥有自己的 state 、 motation 、action、getter 甚至是嵌套子模块 

说明: 能够在大型项目中 更加细化我们的状态管理 使得结构更加清晰 当然也会稍微有点复杂

使用场景: 在项目开发过程中 随着项目逐渐增大 数据关联复杂逐渐加大 多人协同开发 人员变动等 遇到vuex数据更新时 执行某个action导致同名/未预测到关联数据发生了变化

二.命名空间 namespaced

语法:

//开启命令空间
const moduleA ={
    namespaced:true,  //开启namespace:true,该模块就成为命名空间模块了
    state:{
        count:10,
        countA:888
    },
    getters:{...},
    mutations:{...},
    actions:{...}
}

//组件中获取带有命名空间 modules 中的 state数据
//1.辅助函数
computed:{ 
 ...mapState('模块名',['mutation内函数名'])
}

说明:

1.Vuex由于使用单一状态树 应用的所有状态会集中到一个比较大的对象 当应用变得非常复杂时 store对象就有可能变得相当臃肿

2. 因此 vuex允许将store分割成模块(module) 每个模块拥有自己的 state mutation action getter 甚至是嵌套子模块

介绍 : 默认情况下 模块内部的 action mutation 和 getter 是注册在全局命名空间的 这样使得多个模块能够对同一 mutation 或 action 作出响应 如希望模块具有更高的封装度 和 复用性 就可以使用命名空间

怎么让模块成为命名空间: 在单个模块中通过添加 namespaced:true 的方式使得其成为带命名空间的模块

注意: 当开启命名空间时 mutation函数名左边加module内模块名  

示列:

1.this.$store.commit('模块名/mutation内函数名',实参 )

2.this.$store.dispatch('模块名/mutation内函数名',实参 )

三.命名空间时提交模块中的mutation

语法:

//模块中

this.$store.commit('模块名/mutation内函数名',实参 )

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值