vuex中使用mapStations、mapMutations、mapState、mapGetters在modules中的迷惑

vuex中使用单个modules组件状态管理

1.安装vuex

cnpm install vuex --save-dev

2.在src目录下创建store目录并创建index.js,在mian.js中引入index.js
在这里插入图片描述
3.在store目录下创建User目录并创建user.js
内容如下

import Vue from 'vue'
import Vuex from 'vuex';
Vue.use(Vuex)



/*
state:存储状态(变量)
getters:对数据获取之前的再次编译,可以理解为state的计算属性。我们在组件中使用 $store.getters.fun()
mutations:修改状态,并且是同步的。在组件中使用$store.commit('',params)。这个和我们组件中的自定义事件类似。
actions:异步操作。在组件中使用是$store.dispath('')
modules:store的子模块,为了开发大型项目,方便状态管理而使用的。这里我们就不解释了,用起来和上面的一样。


state:
    vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;
getters:
    Getters相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,
    且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,
    Getters 可以用于监听、state中的值的变化,返回计算后的结果


*/

//定义存储状态
const state = {
  count: 1
}

/*
mutations 里面放置的是我们操作state对象属性的方法
外部通过commit  使用mutations内的方法  改变state内部状态
*/

const mutations = {
  mutationsAddCount(state, n = 0) {
     state.count += n;
  },
  mutationsReduceCount(state, n = 0) {
     state.count -= n;
  }
}

/*
actions是异步操作 在methods中使用dispatch进行派发
*/
const actions = {
  actionsAddCount(context, n = 0) {
    return context.commit('mutationsAddCount', n)
  },
  actionsReduceCount({ commit }, n) {
    return commit('mutationsReduceCount', n)
  }
}

const getters = {
  getterCount(state) {
    return state.count;
  }
}


//导出store
export default {
  namespaced:true,
  state,    // 共同维护的一个状态,state里面可以是很多个全局状态
  getters,  // 获取数据并渲染
  actions,  // 数据的异步操作
  mutations  // 处理数据的唯一途径,state的改变或赋值只能在这里

}

4.在index.js中引入user.js

import Vue from 'vue'
import Vuex from 'vuex';
Vue.use(Vuex)

import user from './User/user'

export default new Vuex.Store({
  // 通过modules属性引入user 模块。
  modules:{
    user
  }
})

5.重点,如何在vue中使用user
创建user.vue
引入vuex的mapState, mapMutations, mapActions,mapGetters

import { mapState, mapMutations, mapActions,mapGetters } from "vuex";
<template>
  <div class="home">
    <p>{{ count }}</p>
    <el-row>
      <el-button @click="handleAddClick(10)">增加</el-button>
      <el-button @click="handleReduceClick(10)">减少</el-button>
    </el-row>
    <el-row>
      <el-button @click="actionsHandleAddClick(10)">actions增加</el-button>
      <el-button @click="actionsHandleReduceClick(10)">actions减少</el-button>
    </el-row>
  </div>
</template>

如何使用mapState调用user状态管理?

computed: {
    ...mapState({
      count: state => state.user.count
    })
  }

如何使用mapMutations调用user状态管理?

 ...mapMutations("user", {
      handleAddClick: "mutationsAddCount",
      handleReduceClick: "mutationsReduceCount"
    })

如何使用mapActions调用user状态管理

...mapActions("user", {
      actionsHandleAddClick: "actionsAddCount",
      actionsHandleReduceClick: "actionsReduceCount"
    })

在这里插入图片描述
红色框区域是modules中往外暴露的user状态管理

上面也可以替换成

methods: {
        ...mapActions('user', {
              actionsHandleAddClick(dispatch, param) {
		        dispatch("actionsAddCount", param);
		      },
        })

如果你无法使用[…mapStation,…mapMutations,…mapStations,…mapGetters],
解决方案:

在package.js里面增加"babel-preset-stage-3": “^6.24.1”,

cnpm install babel-preset-stage-3 --save-dev 

接下来在.babelrc 配置

{
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ],
    "transform-object-rest-spread"
  ],
  "presets": [
    ["es2015", { "modules": false }],"stage-3"
  ]
}

如果报es2015错误
安装模块 babel-plugin-transform-object-rest-spread

cnpm install babel-plugin-transform-object-rest-spread --save-dev

以上便是本人对vuex中使用mapStations、mapMutations、mapState、mapGetters在modules中的迷惑的理解,希望能帮助到大家

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值