vuex模块化之modules

本文深入讲解了Vuex中Modules的使用方法,包括如何在store中引入模块,模块内部的state、mutation、action、getters定义,以及命名空间的使用。通过模块化管理,可以使大型项目的状态管理更加清晰和高效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### 一、介绍modules
Vuex中State使用是单一状态树结构,应该的所有的状态都放在state里面,项目比较复杂,那么state是一个很大的对象,store对象也将对变得非常大,难于管理。
modules:可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

### 二、modules使用方法

##### 1、最外层 store/index  通过modules引入某个模块的vuex
```
import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import mutations from './mutations'
import actions from './actions'
import getters from './getters'
// 引入某个模块的vuex
import house from '../pages/xxx/store/index'

Vue.use(Vuex)

export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters,
    modules: {
        house
    }
});
```

##### 2、模块中store/index导出数据
```
import state from './state'
import mutations from './mutations'
import actions from './actions'
import getters from './getters'

export default{
    namespaced: true,
    state,
    mutations,
    actions,
    getters
}
```
##### 3、模块的命名空间
actions, mutations, getters, 也可以限定在当前模块的命名空间中。需要给我们的模块加一个namespaced 属性
```
export default{
    namespaced: true,  // 此属性
    state,
    mutations,
    actions,
    getters
}
```
当所有的actions, mutations, getters 都被限定到模块的命名空间下,我们dispatch actions, commit mutations 都需要用到命名空间。
##### 4、调用actions
调用某个模块下的actions
```
this.$store.dispatch('get_article_info', this.totalProInfo);
变成
this.$store.dispatch('house/get_article_info', this.totalProInfo);
```

##### 5、使用state
```
...mapState('house', ['trackMessages', 'backendApi'])
或者
this.$store.state.
```
同样getters.xxx 就要变成 getters["house/xxx"]


```
有了命名空间之后,mapState, mapGetters, mapActions 函数也都有了一个参数,用于限定命名空间,每二个参数对象或数组中的属性,都映射到了当前命名空间中。
 ...mapState("house",{
   trackMessages: state => state.trackMessages
  })
```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值