vuex

引入vuex

1.利用npm包管理工具仰担,進行安裝 vuex令杈。在控制命令行中輸入下邊的命令就可以了锁蠕。

npm install vuex --save

需要注意的是這里一定要加上 –save养葵,因為你這個包我們在生產(chǎn)環(huán)境中是要使用的入客。

2.新建一個vuex文件夾(這個不是必須的)自阱,并在文件夾下新建store.js文件嚎莉,文件中引入我們的vue和vuex。

import Vue from 'vue';

import Vuex from 'vuex';

3.使用我們vuex沛豌,引入之后用Vue.use進行引用趋箩。

Vue.use(Vuex);

通過這三步的操作,vuex就算引用成功了加派,接下來我們就可以盡情的玩耍了叫确。

入門小Demo

我們這個小案例先聲明一個state的count狀態(tài),在頁面中使用顯示這個count芍锦,然后可以利用按鈕進行加減竹勉,如果你看過我的文章,你一定知道娄琉,在我們學(xué)基礎(chǔ)知識 的時候經(jīng)常編寫這個程序次乓。我們來張圖片幫大家回憶一下。


圖1

就是這個程序孽水,不過我們這次要用的是vuex來進行制作票腰,并實現(xiàn)數(shù)據(jù)的共享。

1.現(xiàn)在我們store.js文件里增加一個常量對象女气。store.js文件就是我們在引入vuex時的那個文件杏慰。

const state={

????count:1

}

2.用export default 封裝代碼,讓外部可以引用。

export default new Vuex.Store({

state

})

3.新建一個vue的模板缘滥,位置在components文件夾下轰胁,名字叫count.vue。在模板中我們引入我們剛建的store.js文件朝扼,并在模板中用{{$store.state.count}}輸出count 的值软吐。

<template>

<div>

? <h2> ?{{msg}} </h2>

? ?<h3> {{$store.state.count}} </h3>

</div>

</template>

<script>

import store from '@/vuex/store'

? ? export default{

? ? ? ? data(){

? ? ? ? ? ? return{

? ? ? ? ? ? ? ? msg:'Hello Vuex',

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? store

?}

</script>

4.在store.js文件中加入兩個改變state的方法。

const mutations={????

add(state){??????

??state.count++;??

??},?

???reduce(state){???

?????state.count--;????

}}?

這里的mutations是固定的寫法吟税,意思是改變的,我們到時候會用一節(jié)課專門講這個mutations姿现,所以你先不用著急肠仪,只知道我們要改變state的數(shù)值的方法,必須寫在mutations里就可以了备典。

5.在count.vue模板中加入兩個按鈕异旧,并調(diào)用mutations中的方法。

<div>

<button @click="$store.commit('add')"> + </button>

<button ?@click="$store.commit('reduce')" > - </button>

</div>

這樣進行預(yù)覽就可以實現(xiàn)對vuex中的count進行加減了提佣。

state訪問狀態(tài)對象

在第1節(jié)我們已經(jīng)寫了一個 const state 吮蛹,這個就是我們說的訪問狀態(tài)對象,它就是我們SPA(單頁應(yīng)用程序)中的共享值拌屏。今天我們主要學(xué)習(xí)狀態(tài)對象賦值給內(nèi)部對象潮针,也就是把stroe.js中的值,賦值給我們模板里data中的值倚喂。我們有三種賦值方式每篷,我們一個一個來學(xué)習(xí)一下。

一端圈、通過computed的計算屬性直接賦值

computed屬性可以在輸出前焦读,對data中的值進行改變,我們就利用這種特性把store.js中的state值賦值給我們模板中的data值舱权。

computed:{

????count(){

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

????}

}

這里需要注意的是return this.$store.state.count這一句矗晃,一定要寫this,要不你會找不到$store的宴倍。這種寫法很好理解张症,但是寫起來是比較麻煩的,那我們來看看第二種寫法啊楚。

二吠冤、通過mapState的對象來賦值

我們首先要用import引入mapState。

import {mapState} from 'vuex';

然后還在computed計算屬性里寫如下代碼:

computed:mapState({

????????count:state=>state.count

})

這里我們使用ES6的箭頭函數(shù)來給count賦值恭理。

三拯辙、通過mapState的數(shù)組來賦值

computed:mapState(["count"])

這個算是最簡單的寫法了,在實際項目開發(fā)當(dāng)中也經(jīng)常這樣使用。

這就是三種賦值方式涯保,是不是很簡單诉濒,雖然簡單,但是在實際項目中經(jīng)常使用夕春,一定要自己動手練習(xí)兩遍啊未荒。

Mutations修改狀態(tài)

上節(jié)課我們學(xué)習(xí)了怎么樣讀取state,那今天我們學(xué)習(xí)一下怎么樣修改狀態(tài)及志。這個常量我們在第一節(jié)課的時候也碰到過片排,并且進行了加減的操作。那這節(jié)課我們就具體學(xué)習(xí)一下速侈,如何操作Mutations率寡。

$store.commit( )

Vuex提供了commit方法來修改狀態(tài),我們粘貼出第一節(jié)課的代碼內(nèi)容倚搬,簡單回顧一下冶共,我們在button上的修改方法。

<button @click="$store.commit('add')"> + </button>

<button?@click="$store.commit('reduce')"> - </button>

store.js文件:

const mutations={

????add(state){

????????state.count++;

????},

????reduce(state){

????????state.count--;

????}

}

傳值:

這只是一個最簡單的修改狀態(tài)的操作每界,在實際項目中我們常常需要在修改狀態(tài)時傳值捅僵。比如上邊的例子,是我們每次只加1眨层,而現(xiàn)在我們要通過所傳的值進行相加庙楚。其實我們只需要在Mutations里再加上一個參數(shù),并在commit的時候傳遞就就可以了谐岁。我們來看具體代碼:

現(xiàn)在store.js文件里給add方法加上一個參數(shù)n醋奠。添加的地方我已經(jīng)標(biāo)黃了。

const mutations={

????add(state,n){

????????state.count+=n;

????},

????reduce(state){

????????state.count--;

????}

}

在Count.vue里修改按鈕的commit( )方法傳遞的參數(shù)伊佃,我們傳遞10窜司,意思就是每次加10.

<p>

<button @click="$store.commit('add',10)"> + </button>

<button @click="$store.commit('reduce')"> - </button>

</p>

這樣兩個簡單的修改我們就完成了傳值,我們可以在瀏覽器中實驗一下了

模板獲取Mutations方法

實際開發(fā)中我們也不喜歡看到$store.commit( )這樣的方法出現(xiàn)航揉,我們希望跟調(diào)用模板里的方法一樣調(diào)用塞祈。

例如:@click=”reduce” ? 就和沒引用vuex插件一樣。

要達到這種寫法帅涂,只需要簡單的兩部就可以了:

? ??1.在模板count.vue里用import 引入我們的mapMutations:

? ??????import { mapState,mapMutations } from 'vuex';

? ? 2.在模板的<script>?標(biāo)簽里添加methods屬性议薪,并加入mapMutations標(biāo)簽里添加methods屬性,并加入mapMutations

methods:mapMutations([

????????'add','reduce'

]),

通過上邊兩部媳友,我們已經(jīng)可以在模板中直接使用我們的reduce或者add方法了斯议,就像下面這樣。

<button @click="reduce"> - </button>

getters計算過濾操作

getters從表面是獲得的意思醇锚,可以把他看作在獲取數(shù)據(jù)之前進行的一種再編輯,相當(dāng)于對數(shù)據(jù)的一個過濾和加工哼御。你可以把它看作store.js的計算屬性坯临。

getters基本用法:

比如我們現(xiàn)在要對store.js文件中的count進行一個計算屬性的操作,就是在它輸出前恋昼,給它加上100.

我們首先要在store.js里用const聲明我們的getters屬性看靠。

const getters = {

????count:function(state){

????????return state.count +=100;

????}

}

寫好了gettters之后,我們還需要在Vuex.Store()里引入液肌,由于之前我們已經(jīng)引入了state盒mutations挟炬,所以引入里有三個引入屬性。代碼如下嗦哆,

export default new Vuex.Store({

????state,mutations,getters

})

在store.js里的配置算是完成了谤祖,我們需要到模板頁對computed進行配置。在vue 的構(gòu)造器里邊只能有一個computed屬性老速,如果你寫多個泊脐,只有最后一個computed屬性可用,所以要對上節(jié)課寫的computed屬性進行一個改造烁峭。改造時我們使用ES6中的展開運算符”…”。

computed:{

????...mapState(["count"]),

????count(){

????????return this.$store.getters.count;

????}

},

需要注意的是秕铛,你寫了這個配置后约郁,在每次count 的值發(fā)生變化的時候,都會進行加100的操作但两。

用mapGetters簡化模板寫法:

我們都知道state和mutations都有map的引用方法把我們模板中的編碼進行簡化鬓梅,我們的getters也是有的,我們來看一下代碼谨湘。

首先用import引入我們的mapGetters

import { mapState,mapMutations,mapGetters } from 'vuex';

在computed屬性中加入mapGetters

...mapGetters(["count"])

相信大家已經(jīng)會了getters的用法绽快,那我們下節(jié)課見了。

參考文獻技術(shù)胖(http://jspang.com/2017/05/03/vuex/)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末紧阔,一起剝皮案震驚了整個濱河市坊罢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌擅耽,老刑警劉巖活孩,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乖仇,居然都是意外死亡憾儒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門乃沙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來起趾,“玉大人,你說我怎么就攤上這事警儒⊙雕桑” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缭保。 經(jīng)常有香客問我汛闸,道長,這世上最難降的妖魔是什么艺骂? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任诸老,我火速辦了婚禮,結(jié)果婚禮上钳恕,老公的妹妹穿的比我還像新娘别伏。我一直安慰自己,他們只是感情好忧额,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布厘肮。 她就那樣靜靜地躺著,像睡著了一般睦番。 火紅的嫁衣襯著肌膚如雪类茂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天托嚣,我揣著相機與錄音巩检,去河邊找鬼。 笑死示启,一個胖子當(dāng)著我的面吹牛兢哭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夫嗓,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼迟螺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舍咖?” 一聲冷哼從身側(cè)響起矩父,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎排霉,沒想到半個月后浙垫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡郑诺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年夹姥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辙诞。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡辙售,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出飞涂,到底是詐尸還是另有隱情旦部,我是刑警寧澤祈搜,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站士八,受9級特大地震影響容燕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜婚度,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一蘸秘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝗茁,春花似錦醋虏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饭寺,卻和暖如春阻课,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背艰匙。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工柑肴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旬薯。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像适秩,于是被迫代替她去往敵國和親绊序。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

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

  • 姓名:岳沁 學(xué)號:17101223458 轉(zhuǎn)載自:http://blog.csdn.net/h5_queensty...
    丘之心閱讀 2,148評論 0 1
  • 安裝 npm npm install vuex --save 在一個模塊化的打包系統(tǒng)中秽荞,您必須顯式地通過Vue.u...
    蕭玄辭閱讀 2,945評論 0 7
  • Vuex是什么骤公? Vuex 是一個專為 Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應(yīng)用的所有組件...
    蕭玄辭閱讀 3,122評論 0 6
  • vuex 場景重現(xiàn):一個用戶在注冊頁面注冊了手機號碼扬跋,跳轉(zhuǎn)到登錄頁面也想拿到這個手機號碼阶捆,你可以通過vue的組件化...
    sunny519111閱讀 8,022評論 4 111
  • Vuex 的學(xué)習(xí)記錄 資料參考網(wǎng)址Vuex中文官網(wǎng)Vuex項目結(jié)構(gòu)示例 -- 購物車Vuex 通俗版教程Nuxt....
    流云012閱讀 1,462評論 0 7