Vue中Vuex的使用方法技巧

備注:此案例是用vue腳手架創(chuàng)建的demo

1浦箱、首先要知道什么是Vuex?

在Vue官方網(wǎng)站的解釋是: Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式吸耿。?它采用集中式存儲管理應用的所有組件的狀態(tài),并以相應的規(guī)則保證狀態(tài)以一種可預測的方式發(fā)生變化??

2酷窥、使用Vuex時咽安,常見的關鍵詞

1、store:倉庫容器蓬推, 包含應用中大部分的狀態(tài) (state)

2妆棒、state:數(shù)據(jù)狀態(tài)

3、mutations:更改 Vuex 的 store 中狀態(tài)的唯一方法是提交 mutation

4沸伏、commit: 調用?store.commit?方法糕珊,觸發(fā) mutation

5、mapState:借助mapState輔助函數(shù)獲取store中保存的狀態(tài)毅糟,避免當一個組件需要獲取多個狀態(tài)的時候红选,將這些狀態(tài)都聲明為計算屬性時代碼冗余

3、組件及模塊的分配

1留特、main.js:主模塊

2纠脾、store.js:管理倉庫

3、state.js:數(shù)據(jù)狀態(tài)

4蜕青、mutations.js:更改 Vuex 的 store 中數(shù)據(jù)狀態(tài)

5苟蹈、template.vue:組件渲染

備注:為了方便以后代碼的修改,我將state和mutations從store中抽離出來右核,單獨做了模塊慧脱,使用時直接在store中引用

4、Vuex的使用

(1)贺喝、安裝vuex菱鸥,在工作目錄下執(zhí)行命令:

npm install vuex --save

(2)宗兼、創(chuàng)建store,狀態(tài)管理倉庫:store.js

import? Vue? from? 'vue'

import? Vuex? from? 'vuex'?

Vue.use(Vuex)

import? state? from? 'state.js路徑'

import? mutations? from? 'mutations.js路徑'? ?

const? store? =? new? Vuex.Store({

????????????state,mutations

})

export? default? store

(3)氮采、創(chuàng)建state.js

//定義狀態(tài)管理數(shù)據(jù)

//user 記錄用戶的登錄信息

const state = {

? ? ? ? user:localStorage.user?JSON.parse(localStorage.user):'',

}

export? default? state


(4)創(chuàng)建mutations.js

//更改 Vuex 的 store 中狀態(tài)的唯一方法是提交 mutation殷绍,Vuex 中的 mutation 非常類似于事件:每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數(shù) (handler)。這個回調函數(shù)就是我們實際進行狀態(tài)更改的地方鹊漠,并且它會接受 state 作為第一個參數(shù)

const? mutations? =? {

? ? ? ? ? onLogin(state){ //更改state中的user數(shù)據(jù)

? ? ? ? ? ? ? ? ?state.user = JSON.parse(localStorage.user);

? ? ? ? ? },

}

export default mutations

(5)主到、在main.js中引入store

import? ?Vue? from? 'vue'

import? App? from? './App'

import? router? from? './router'

import? store? from? 'store.js路徑'

Vue.config.productionTip? =? false

new Vue({

? ? ? el: '#app',

? ? ? router,

? ? ? store,

? ? ? template: '<App/>'

? ? ? ?components: { App }

})

(6)、在template.vue組件中使用

<template>

? ? ? ? <div class='app-footer'>

? ? ? ? ? ? ? ? ?<div v-if='_user'>

? ? ? ? ? ? ? ? ? ? ? ? ? <span>購物車</span>

? ? ? ? ? ? ? ? ?</div>

? ? ? ? ? ? ? ? <button @click="onToLogin">立即登錄</button>

? ? ? ? </div>

</template>

<script>

? ? ? ? ? ?import? ?{mapState}? ?from? ?'vuex'

? ? ? ? ? ?export? default{

? ? ? ? ? ? ? ? name:' app-footer ',

? ??????????????/*

????????????????//方法1

????????????????computed:{//計算屬性躯概,動態(tài)獲取state數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ? ?user(){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return? ? this.$store.state.user;

? ? ? ? ? ? ? ? ? ? ? ? ?},

????????????????},

????????????????*/

????????????????/*

????????????????//方法2

????????????????//當一個組件需要獲取多個狀態(tài)的時候登钥,將這些狀態(tài)都聲明為計算屬性,方法1會產(chǎn)生代碼冗余,可以借助mapState輔助函數(shù)獲取store中保存的狀態(tài)

????????????????computed:mapState(['user']),

????????????????*/

????????????????/*

????????????????//方法3

????????????????//方法2中娶靡,當組件本身的數(shù)據(jù)名與state中的數(shù)據(jù)名重復時牧牢,這時很容易造成數(shù)據(jù)混亂,為了不破壞state中原有的數(shù)據(jù)姿锭,在使用mapState函數(shù)時可以傳入一個對象,給state數(shù)據(jù)起一個別名

????????????????computed:mapState({

????????????????????????//_user:'user',? ? //方法1:key-value鍵值對形式塔鳍,key為別名,value為state里對應的數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ?_user(state){? ? ?//方法2:函數(shù)形式艾凯,函數(shù)名為別名献幔,參數(shù)為state,返回值為state里對應的數(shù)據(jù)名

????????????????????????????????return state.user;

????????????????????????}

????????????????}),

????????????????*/

????????????????//方法4

????????????????//如果我們在組件中有很多自己的業(yè)務邏輯需要計算屬性趾诗,我們可以用對象展開運算符

? ??????????????computed:{

????????????????????????userStr(){//自己的業(yè)務邏輯

????????????????????????????????return JSON.stringify(this.$store.state.user);

????????????????????????},

? ? ? ? ? ? ? ? ? ? ? ? ? ...mapState({//展開運算符蜡感,獲取state數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_user(state){?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return state.user;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?},

? ? ? ? ? ? ? ? ? ? ? ? ? ? }),

? ? ? ? ? ? ? ? ? ? },

? ??????????????????methods:{//登錄事件,更改state的user信息

? ??????????????????????????onToLogin(){

? ??????????????????????????????????localStorage.user = JSON.stringify({nick:'FamilyLi',user:'Hello',id:1})

? ??????????????????????????????????this.$store.commit('onLogin');//注意恃泪,這里的參數(shù)應該對應mutations里的事件屬性

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

????????????????????},

? ? ? ? ? ?}

</script>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末郑兴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贝乎,更是在濱河造成了極大的恐慌情连,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件览效,死亡現(xiàn)場離奇詭異却舀,居然都是意外死亡,警方通過查閱死者的電腦和手機锤灿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門挽拔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人但校,你說我怎么就攤上這事螃诅。” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵术裸,是天一觀的道長倘是。 經(jīng)常有香客問我,道長袭艺,這世上最難降的妖魔是什么搀崭? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮匹表,結果婚禮上门坷,老公的妹妹穿的比我還像新娘。我一直安慰自己袍镀,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布冻晤。 她就那樣靜靜地躺著苇羡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼻弧。 梳的紋絲不亂的頭發(fā)上设江,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音攘轩,去河邊找鬼叉存。 笑死,一個胖子當著我的面吹牛度帮,可吹牛的內容都是我干的歼捏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笨篷,長吁一口氣:“原來是場噩夢啊……” “哼瞳秽!你這毒婦竟也來了?” 一聲冷哼從身側響起率翅,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤练俐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冕臭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腺晾,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年辜贵,在試婚紗的時候發(fā)現(xiàn)自己被綠了悯蝉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡念颈,死狀恐怖泉粉,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤嗡靡,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布跺撼,位于F島的核電站,受9級特大地震影響讨彼,放射性物質發(fā)生泄漏歉井。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一哈误、第九天 我趴在偏房一處隱蔽的房頂上張望哩至。 院中可真熱鬧,春花似錦蜜自、人聲如沸菩貌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箭阶。三九已至,卻和暖如春戈鲁,著一層夾襖步出監(jiān)牢的瞬間仇参,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工婆殿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诈乒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓婆芦,卻偏偏與公主長得像怕磨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寞缝,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容