vuex 快速上手

一. 引用

引入Vuex(前提是已經(jīng)用Vue腳手架工具構(gòu)建好項目)

1.安裝

npm install vuex --save

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

2梅掠、新建一個store文件夾(這個不是必須的),并在文件夾下新建store.js文件藐鹤,文件中引入我們的vue和vuex瓤檐。

import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex);

export default new vuex.Store({
      。娱节。泉瞻。
})

3、在main.js 中引入新建的vuex文件

import store from './store'

4败徊、再然后 , 在實例化 Vue對象時加入 store 對象 :

new Vue({
      el: '#app',
      store,//使用store
      template: '<App/>',
      components: { App }
    })

二. Vue 理解

Vuex 使用 單一狀態(tài)樹,通俗理解就是一個應(yīng)用的數(shù)據(jù)集合智政,可以想象為一個“前端數(shù)據(jù)庫”,讓其在各個頁面上實現(xiàn)數(shù)據(jù)的共享稠歉,并且可操作

Vuex 規(guī)定掰担,屬于應(yīng)用層級的狀態(tài)只能通過 Mutation 中的方法來修改,而派發(fā) Mutation 中的事件只能通過 action怒炸。

從左到右带饱,從組件出發(fā),組件中調(diào)用 action阅羹,在 action 這一層級我們可以和后臺數(shù)據(jù)交互勺疼,比如獲取初始化的數(shù)據(jù)源,或者中間數(shù)據(jù)的過濾等捏鱼。然后在 action 中去派發(fā) Mutation执庐。Mutation 去觸發(fā)狀態(tài)的改變,狀態(tài)的改變导梆,將觸發(fā)視圖的更新轨淌。

注意事項
數(shù)據(jù)流都是單向的

組件能夠調(diào)用 action

action 用來派發(fā) Mutation

只有 mutation 可以改變狀態(tài)

store 是響應(yīng)式的,無論 state 什么時候更新看尼,組件都將同步更新
image

三. 使用

1. State

在 store 中的 state 對象递鹉,可以理解為 Vue 實例中的 data 對象,它用來保存最基本的數(shù)據(jù)藏斩。

import Vue from 'Vue';
import Vuex from 'Vuex';
Vue.use(Vuex);
let store = new Vuex.Store({
    state: {
        stateA: 'a',
        stateB: 'b',
        stateC: 'c'
    }
});
console.log(store.state.stateA); // a

在 Vue 中獲取 store 中的狀態(tài)

let app = new Vue({
   el: '#demo',
    template: `
{{myState}}
`,
    computed: {
         myState() {
            return store.state.stateA;
        }
    }
});

2. Mutations

更改 Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation梳虽。
mutation中寫有修改數(shù)據(jù)的邏輯。
另外mutation里只能執(zhí)行同步操作灾茁。

mutations:{
        getConfig(state){
            let _this = this;
            let payload = {
                timestamp: 123123412414142,
                principal: 1000
            };
            let cheaders = {
                headers: {
                    appname:'walletandroid',
                    appversion:'3',
                    signature:'eced94b3244b16ed81d2517589baae7e90727382b7c56750cc517415583c8a5b'
                }
            };
            Vue.http.post('http://apitest.wewallet.info/wallet/v1/roulette/123455/fsdfasdfa/config', JSON.stringify(payload), cheaders)
                .then((response) => {
                    state.datalist = response.body.data;
                    console.log(state.datalist)
                });
        },
        getTry(state){
            let _this = this;
            let payload = {
                timestamp: 123123412414142,
                principal: 1000
            };
            let cheaders = {
                headers: {
                    appname:'walletandroid',
                    appversion:'3',
                    signature:'eced94b3244b16ed81d2517589baae7e90727382b7c56750cc517415583c8a5b'
                }
            };
            Vue.http.post('http://apitest.wewallet.info/wallet/v1/roulette/123455/fsdfasdfa/try', JSON.stringify(payload), cheaders)
                .then((response) => {
                    state.coins = response.body.data.coins;
                })
        },
    },

想要改變狀態(tài)的時候都是用store.commit的方式

帶參數(shù)提交
created() {
      this.$store.commit('change',item);
}
mutations:{
      changeData(state,item){
          state.data = item
      }
}
在組件中提交 Mutations

你可以在組件中使用 this.$store.commit(‘xxx’) 提交 mutation窜觉,或者使用 mapMutations 輔助函數(shù)將組件中的 methods 映射為 store.commit 調(diào)用(需要在根節(jié)點注入 store)谷炸。

created() {      //vue created鉤子函數(shù),在頁面加載時執(zhí)行
            this.$store.dispatch('addCount')
        },

3. Action

action,動作禀挫。
對于store中數(shù)據(jù)的修改操作動作在action中提交旬陡。
其實action和mutation類似,但是action提交是mutation语婴,并不直接修改數(shù)據(jù)描孟,而是觸發(fā)mutation修改數(shù)據(jù)。

actions:{
        config({commit}){
            commit('getConfig')
        },
        try({commit}){
            commit('getTry')
        }
    },

示例

store的index.js文件

import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex);


export default new vuex.Store({
    state:{
        datalist:[],
        coins:''
    },
    mutations:{
        getConfig(state){
            let _this = this;
            let payload = {
                timestamp: 123123412414142,
                principal: 1000
            };
            let cheaders = {
                headers: {
                    appname:'android',
                    appversion:'3',
                    signature:'eced94b3244b16ed81d2517cc517415583c8a5b'
                }
            };
            Vue.http.post('http://apitestv1/roulette/123455/fsdfasdfa/config', JSON.stringify(payload), cheaders)
                .then((response) => {
                    state.datalist = response.body.data;
                    console.log(state.datalist)
                });
        },
        getTry(state){
            let _this = this;
            let payload = {
                timestamp: 123123412414142,
                principal: 1000
            };
            let cheaders = {
                headers: {
                    appname:'walletandroid',
                    appversion:'3',
                    signature:'eced94b3244b16ec517415583c8a5b'
                }
            };
            Vue.http.post('http://apitest/v1/roulette/123455/fsdfasdfa/try', JSON.stringify(payload), cheaders)
                .then((response) => {
                    state.coins = response.body.data.coins;
                })
        },
    },
    actions:{
        config({commit}){
            commit('getConfig')
        },
        try({commit}){
            commit('getTry')
        }
    },
})

組件

<template>
       <div class="box">
              <div>{{getList}}</div>
              <div>{{getCoins}}</div>
       </box>
</template>
computed:{
       getList(){
            return this.datalist = this.$store.state.datalist
       }, 
       getCoins(){
            return this.coins = this.$store.state.coins
       } 
},
created() {
       this.$store.dispatch('config');
       this.$store.dispatch('try');
},
最后編輯于
?著作權(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)容

  • Vue2簡單入門 Vue.js再入門 Vue.js使用vue-router構(gòu)建單頁應(yīng)用 Vue.js狀態(tài)管理工具V...
    _ihhu閱讀 11,526評論 2 22
  • Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式往果。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài)疆液,并以相應(yīng)...
    白水螺絲閱讀 4,667評論 7 61
  • 安裝 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
  • 前幾天,“油膩”這個詞突然火了肮之,一打開微信掉缺,各個公號上都有文章在討論“油膩”這個話題。說實話戈擒,我內(nèi)心是抗拒這個詞的...
    米蘇聞閱讀 590評論 3 4