Vuex略解之Modules模块化以及mapGetters mapActions和mapState

本文介绍了Vuex的Modules模块化管理,通过创建独立的状态文件来管理不同部分的状态。讲解了如何设置namespaced以区分不同模块,并在组件中使用mapState、mapGetters和mapActions来访问和操作状态。同时,通过实例展示了如何在组件中触发actions并传递参数,实现状态的实时更新。
摘要由CSDN通过智能技术生成

因为在大多数的项目中,我们对于全局状态的管理并不仅仅一种情况的需求,有时有多方面的需求,比如写一个商城项目,你所用到的全局state可能是关于购物车这一块儿的也有可能是关于商品价格这一块儿的;像这样的情况我们就要考虑使用vuex中的 modules 模块化了,具体怎么使用modules呢?咱们继续一步一步的走:

首先,在store文件夹下面新建一个modules文件夹,然后在modules文件里面建立需要管理状态的js文件,既然要把不同部分的状态分开管理,那就要把它们给分成独立的状态文件了,如下图:

而对应的store文件夹下面的index.js 里面的内容就直接改写成:

import Vue from 'vue';

import Vuex from 'vuex';

import footerStatus from './modules/footerStatus'

import collection from './modules/collection'

Vue.use(Vuex);



export default new Vuex.Store({

    modules:{

         footerStatus,

         collection

    }

});

 

相应的js,其中的 namespaced:true 表示当你需要在别的文件里面使用( mapGetters、mapActions 接下来会说 )时,里面的方法需要注明来自哪一个模块的方法:

//collection.js

const state = {

  collects: [], //初始化一个collects数组

}

const getters = {

  renderCollects (state) {//承载变化的collects

    return state.collects

  }

}

const mutations = {

  pushCollects (state,items) {

    //如何变化collects 插入items

    state.collects.push(items)

  }

}

const actions = {

  involePushItems (context,item) {

    //触发mutations里面的pushCollects,传入数据形参item 对应到items

    context.commit('pushCollects',item)

  }

}



export default {

  namespaced: true,// 用于在全局引用此文件里的方法时标识这一个的文件名

  state,

  getters,

  mutations,

  actions
Vuex 是一个专为 Vue.js 应用程序设计的状态管理模式,它提供了一种集中存储和管理应用组件共享状态的方式。在Vuex 4.0中,模块化是核心特性之一,使得状态划分更加清晰,易于管理和维护。 模块化数据获取主要有以下几个步骤: 1. **创建模块**(Modules):在 Vuex 中,你可以将状态、getteraction 和 mutations 分离到不同的模块(modules)里。每个模块是一个对象,包含了这些状态管理相关的属性。 ```javascript export const userModule = { state: { userName: '' }, getters: { getUserInfo: state => state.userName }, actions: { setUser: ({ commit }, username) => commit('SET_USER', username) }, mutations: { SET_USER: (state, username) => (state.userName = username) } }; ``` 2. **导入模块**:在需要使用模块的地方,通过 `import` 引入,并在 store 中使用 `module.exports` 注册模块。 ```javascript import userModule from './modules/user' export default new Vuex.Store({ modules: { user: userModule } }) ``` 3. **使用模块**:在组件中通过 `mapState`, `mapGetters`, `mapActions`, 和 `mapMutations` 函数,访问和操作模块内的状态和方法。 ```javascript computed: { ...mapGetters(['getUserInfo']) }, methods: { async updateUser() { await this.$store.dispatch('user.setUser', 'New User'); } } ``` 4. **命名空间**:为了防止命名冲突,可以使用命名空间来组织模块,如 `auth` 或 `settings`。 ```javascript export const authModule = { // ... } // 在 store 中导入 import auth from './modules/auth' modules: { auth: auth, // ... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值