vuex

引入vuex

1.利用npm包管理工具,進(jìn)行安裝 vuex。在控制命令行中輸入下邊的命令就可以了。

npm install vuex --save

需要注意的是這里一定要加上 –save,因?yàn)槟氵@個(gè)包我們在生產(chǎn)環(huán)境中是要使用的。

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

import Vue from 'vue';

import Vuex from 'vuex';

3.使用我們vuex,引入之后用Vue.use進(jìn)行引用。

Vue.use(Vuex);

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

入門小Demo

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


圖1

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

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

const state={

????count:1

}

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

export default new Vuex.Store({

state

})

3.新建一個(gè)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文件中加入兩個(gè)改變state的方法。

const mutations={????

add(state){??????

??state.count++;??

??},?

???reduce(state){???

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

}}?

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

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

<div>

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

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

</div>

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

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

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

一、通過computed的計(jì)算屬性直接賦值

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

computed:{

????count(){

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

????}

}

這里需要注意的是return this.$store.state.count這一句,一定要寫this,要不你會(huì)找不到$store的。這種寫法很好理解,但是寫起來是比較麻煩的,那我們來看看第二種寫法。

二、通過mapState的對象來賦值

我們首先要用import引入mapState。

import {mapState} from 'vuex';

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

computed:mapState({

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

})

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

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

computed:mapState(["count"])

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

這就是三種賦值方式,是不是很簡單,雖然簡單,但是在實(shí)際項(xiàng)目中經(jīng)常使用,一定要自己動(dòng)手練習(xí)兩遍啊。

Mutations修改狀態(tài)

上節(jié)課我們學(xué)習(xí)了怎么樣讀取state,那今天我們學(xué)習(xí)一下怎么樣修改狀態(tài)。這個(gè)常量我們在第一節(jié)課的時(shí)候也碰到過,并且進(jìn)行了加減的操作。那這節(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--;

????}

}

傳值:

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

現(xiàn)在store.js文件里給add方法加上一個(gè)參數(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>

這樣兩個(gè)簡單的修改我們就完成了傳值,我們可以在瀏覽器中實(shí)驗(yàn)一下了

模板獲取Mutations方法

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

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

要達(dá)到這種寫法,只需要簡單的兩部就可以了:

? ??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計(jì)算過濾操作

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

getters基本用法:

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

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

const getters = {

????count:function(state){

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

????}

}

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

export default new Vuex.Store({

????state,mutations,getters

})

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

computed:{

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

????count(){

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

????}

},

需要注意的是,你寫了這個(gè)配置后,在每次count 的值發(fā)生變化的時(shí)候,都會(huì)進(jìn)行加100的操作。

用mapGetters簡化模板寫法:

我們都知道state和mutations都有map的引用方法把我們模板中的編碼進(jìn)行簡化,我們的getters也是有的,我們來看一下代碼。

首先用import引入我們的mapGetters

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

在computed屬性中加入mapGetters

...mapGetters(["count"])

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

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

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

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

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

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