Vuex State模块化

当应用非常复杂的时候,store对象就会变得非常臃肿。
为了解决上面的问题,我们将store分成模块
文件目录如下
方案一:
在这里插入图片描述

方案二:
在这里插入图片描述

状态管理中 state 就相当于 vue中 data属性, getters就相当于vue中的computed属性, mutations,
actions就相当于vue中的方法

getter

gettetr被认为 是计算属性 返回值会作为依赖缓存起来 只有当依赖发生变化时才会重新计算
在这里插入图片描述

mutation

在这里插入图片描述

action

在这里插入图片描述

模块化

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: { // 这里声明两个模块,后面使用就知道为啥要这样搞了
    collection,
    footerStatus
  }
})

1.模块化以后,state的获取务必要加上一个模块名,才能获取到模块里面的对象

eg:  
	this.$store.state.moduleA.name

2.在辅助函数中我们同样需要这样做

	...mapState({
	name:state => state.moduleA.name
})

3.命名空间
一旦去做了模块化处理,这样一定会产生命名冲突。
所以我们利用了namespace:true来避免命名冲突
当模块被注册之后
模块里面的state action mutation会自动根据 模块名自动调整命名

export default moduleA {
		namespace:true,
		state,
		action,
		mutation
	}

同样vuex的开发者考虑到,我们每次都要写模块名很麻烦,所以在辅助函数中给我们提供了一个参数位置来绑定命名空间

...mapstate('moduleA',{
	name:state=>state.name
})

在这里插入图片描述

const board = {
  //数据当前的状态
  state:{
    boardDataset:[]
  },
//get获取状态 类似于computed
  getters:{
    getBoardDataset(state){
      return state.boardDataset
    }
  },
//同步更新状态
  actions:{
    changeBoardDataset(state , item){
      state.boardDataset.push(item)
    }
  },
//异步更新状态
  mutations:{
    asynChangeBoardDataset(context,item){
      context.commit('changeBoardDataset',item)
    }
  }
}

//导出模块
export default board;

在需要的组件中我们通过辅助函数进行引用:

 ...mapState({boardDatasets:state=>state.board.boardDataset})
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值