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"
    // }),
}

...
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 我們經(jīng)常用element-ui做后臺管理系統(tǒng),經(jīng)常會遇到父組件給子組件傳遞數(shù)據(jù),下面一個簡單的例子,點擊按鈕...
    為光pig閱讀 895評論 0 16
  • 前言 幾種本地存儲的方法 1.localstorage : 真正的本地持久化存儲,存放數(shù)據(jù)大小為一般為5MB,只...
    笑該動人d閱讀 4,129評論 0 1
  • 終于又開始學習了!最近有點瞎忙,哎! Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式。狀態(tài)管理,就...
    小本YuDL閱讀 333評論 0 0
  • ?? 上面我們介紹如何拆分項目,采用的是按屬性的方式去拆分,將getters/actions/mutations等屬...
    木頭就是我呀閱讀 1,122評論 0 1
  • vuex是一個狀態(tài)管理模式,通過用戶的actions觸發(fā)事件,然后通過mutations去更改數(shù)據(jù)(你也可以說狀態(tài)...
    Ming_Hu閱讀 2,139評論 3 3

友情鏈接更多精彩內(nèi)容