Vuex文件拆分

store文件下目錄

index.ts
state.ts
mutation-types.ts
mutations.ts
getters.ts
actions.ts

文件

index.ts

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'
import mutations from './mutations'
import actions from './actions'

Vue.use(Vuex)

export default new Vuex.Store({
  state,
  getters,
  mutations,
  actions
})

state.ts(唯一數(shù)據(jù)源秕铛,包含全部應(yīng)用層級的狀態(tài))

/* 優(yōu)先從本地獲取 */
let user = localStorage['user'];
/* 共享數(shù)據(jù) */
const state = {
    name:"測試",
    count:1,
    user: user ? JSON.parse(user) : { name: '個人中心'},
    list: {},
}
export default state;

mutation-types.ts(定義常量暴露出去)

export const SET_ADD_COUNT = 'SET_ADD_COUNT'
export const SET_REMOVE_COUNT = 'SET_REMOVE_COUNT'

mutations.ts(提交 mutation档桃,更改 Vuex 的 state 中的數(shù)據(jù)狀態(tài),接收state作為第一個參數(shù))

import * as TYPES from './mutation-types'
const mutations = {
    [TYPES.SET_ADD_COUNT](state: { count: number; },data: number){
        if(data){
            state.count += data;
        }else{
            state.count++;
        }
    },
    [TYPES.SET_REMOVE_COUNT](state: { count: number; },data: number){
        if(data){
            state.count -= data;
        }else{
            state.count--;
        }
    }
}
export default mutations;

getters.ts(從store 中的 state 中派生出一些狀態(tài) ,暴露為 store.getters 對象)

const getters = {
    _user:function(state: { user: any; }){
        return state.user;
    },
    _list: function(state: { list: any; }){
        return state.list
    },
    _getCount:function(state: { count: number; }){
        return state.count + 10;
    }
}

export default getters;

actions.ts(Action 提交 mutation,執(zhí)行異步操作)

import * as TYPES from './mutation-types'

const actions = {
    [TYPES.SET_ADD_COUNT](context: { commit: (arg0: string, arg1: any) => void; },val: any){
        context.commit(TYPES.SET_ADD_COUNT,val);
    },
    [TYPES.SET_REMOVE_COUNT](context: { commit: (arg0: string, arg1: any) => void; },val: any){
        context.commit(TYPES.SET_REMOVE_COUNT,val);
    }
}

export default actions;

頁面引入

<template>
  <div class="home">
    我是從頁面直接獲取的值:{{this.$store.state}}
    <p>--------------------------------------</p>
    我是從getters中獲取的值:{{$store.getters}}
    <p>--------------------------------------</p>
    我是從mapState中獲取的值:{{message}}
    <p>--------------------------------------</p>
    我是從mapGetters中獲取的值:{{_getCount}}
    <p>--------------------------------------</p>
    <div>
      <button @click="handelAddCount">add count</button>
      <button @click="handelRemoveCount">remove count</button>
    </div>
  </div>
</template>
<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
/* mapState、mapGetters、mapActions輔助函數(shù) */
import {mapState,mapGetters,mapActions} from 'vuex'

export default {
  name: 'Home',
  components: {
    HelloWorld
  },
  computed:{
    ...mapState({
      message: state => state.count + 3
    }),
    ...mapGetters(['_getCount']),
  },
  methods:{
    handelAddCount(){
      /* 提交(異步)actions */
      this.$store.dispatch('SET_ADD_COUNT',10);
      /* 提交(同步)mutations */
      // this.$store.commit('SET_ADD_COUNT');
    },
    handelRemoveCount(){
      /* 提交(異步)actions */
      // this.$store.dispatch('SET_REMOVE_COUNT',4);
      /* 提交(同步)mutations */
      // this.$store.commit('SET_REMOVE_COUNT');
      /* 調(diào)用 */
      this.SET_REMOVE_COUNT();
    },
    //mapActions 使用方法一
    ...mapActions(['SET_REMOVE_COUNT']),
    //mapActions 使用方法二
    /* ...mapActions({
        SET_REMOVE_COUNT: "SET_REMOVE_COUNT"
    }) */
  }
}
</script>

_20200401140837.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尖滚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瞧柔,更是在濱河造成了極大的恐慌漆弄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件造锅,死亡現(xiàn)場離奇詭異撼唾,居然都是意外死亡,警方通過查閱死者的電腦和手機哥蔚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門倒谷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糙箍,你說我怎么就攤上這事渤愁。” “怎么了深夯?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵抖格,是天一觀的道長。 經(jīng)常有香客問我,道長他挎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任捡需,我火速辦了婚禮办桨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘站辉。我一直安慰自己呢撞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布饰剥。 她就那樣靜靜地躺著殊霞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汰蓉。 梳的紋絲不亂的頭發(fā)上绷蹲,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音顾孽,去河邊找鬼祝钢。 笑死,一個胖子當(dāng)著我的面吹牛若厚,可吹牛的內(nèi)容都是我干的拦英。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼测秸,長吁一口氣:“原來是場噩夢啊……” “哼疤估!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起霎冯,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤铃拇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肃晚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锚贱,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年关串,在試婚紗的時候發(fā)現(xiàn)自己被綠了煞躬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撑螺。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜜徽,到底是詐尸還是另有隱情,我是刑警寧澤紊扬,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布睛榄,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏睁本。R本人自食惡果不足惜尿庐,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呢堰。 院中可真熱鬧抄瑟,春花似錦、人聲如沸枉疼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骂维。三九已至惹资,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間航闺,已是汗流浹背褪测。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留潦刃,地道東北人汰扭。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像福铅,于是被迫代替她去往敵國和親萝毛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 安裝 npm npm install vuex --save 在一個模塊化的打包系統(tǒng)中滑黔,您必須顯式地通過Vue.u...
    蕭玄辭閱讀 2,934評論 0 7
  • vuex是一個狀態(tài)管理模式笆包,通過用戶的actions觸發(fā)事件,然后通過mutations去更改數(shù)據(jù)(你也可以說狀態(tài)...
    Ming_Hu閱讀 2,023評論 3 3
  • 上一章總結(jié)了 Vuex 的框架原理略荡,這一章我們將從 Vuex 的入口文件開始庵佣,分步驟閱讀和解析源碼。由于 Vuex...
    你的肖同學(xué)閱讀 1,786評論 3 16
  • ### store 1. Vue 組件中獲得 Vuex 狀態(tài) ```js //方式一 全局引入單例類 // 創(chuàng)建一...
    蕓豆_6a86閱讀 730評論 0 3
  • 習(xí)慣養(yǎng)成很容易汛兜,戒掉卻很難0头唷!粥谬! 什么是Vuex肛根? Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式...
    前端又又閱讀 2,769評論 0 1