Vuex及mapState,mapGetters,mapMutations,mapActions在子模块的简单使用

Vuex安装

npm n install vuex --save

Vuex使用案列

  • store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters';

Vue.use(Vuex)

// https://webpack.js.org/guides/dependency-management/#requirecontext
const modulesFiles = require.context('./modules', true, /\.js$/)

// you do not need `import app from './modules/app'`
// it will auto require all vuex module from modules file
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  // set './app.js' => 'app'
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})



export default new Vuex.Store({
    modules,
    getters
})
  • store/getters.js
const getters = {
    username:state => state.user.username,
}
export default getters
  • store/modules/user.js
const types = {
    SET_USERNAME: 'SET_USERNAME', // 用户名称
}

const state = {
    username: ''
}

const mutations = {
    [types.SET_USERNAME](state, username) {
        state.username = username;
    },
};

const actions = {
    /**登录 */
    login({ commit, state },userInfo){
        return new Promise((resolve, reject) => {
            // login(state.userInfo).then(res=>{
            //     resolve();
            // }).catch(err=>{
            //     reject(err)
            // })
        })
    }
}
export default {
    //namespaced这是属性用于解决不同模块的命名冲突问题,在不同页面引入getter、actions、mutations时,要加上模块名
    namespaced: true,
    state,
    mutations,
    actions
}

注意:最后在main.js中引入


在模块中使用mapState,mapGetters,mapMutations,mapActions

import { mapState, mapGetters, mapActions } from "vuex"
...

computed: {
    ...mapState({
      username: state => state.user.username
    }),
    ...mapGetters(["username"])
},

...

methods:{
    ...mapActions('user',['login']),
    //或者用以下方法使用子模块中的Action
    // ...mapActions({
    //   loginOut: "user/loginOut"
    // }),
}

...
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮...
    为光pig阅读 778评论 0 16
  • 前言 几种本地存储的方法 1.localstorage : 真正的本地持久化存储,存放数据大小为一般为5MB,只...
    笑该动人d阅读 3,898评论 0 1
  • 终于又开始学习了!最近有点瞎忙,哎! Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。状态管理,就...
    小本YuDL阅读 276评论 0 0
  • 😜 上面我们介绍如何拆分项目,采用的是按属性的方式去拆分,将getters/actions/mutations等属...
    木头就是我呀阅读 1,060评论 0 1
  • vuex是一个状态管理模式,通过用户的actions触发事件,然后通过mutations去更改数据(你也可以说状态...
    Ming_Hu阅读 2,039评论 3 3