Vuex學(xué)習(xí)整理

https://vuex.vuejs.org/zh/guide/

vuex核心函數(shù) vue的使用 關(guān)鍵使用
state computed ...mapstate(對(duì)象操作符號(hào))
getter computed ...mapGetters(輔助操作符)
mutation method commit提交,同步,使用常量替代函數(shù)名稱(chēng)
action method dispatch提交 ...mapAction 輔助函數(shù)
module 無(wú)

mutations的使用

mutations的使用比較特殊琼富,不能通過(guò)mutation直接調(diào)用,需要通過(guò)commit方法庇楞,并且mutations中是使用同步調(diào)用,舉例來(lái)說(shuō),如果需要修改count的之可以直接通過(guò)this.$store.commit(this.$store.state.count ++'),
但是對(duì)于多個(gè)地方修改同一個(gè)值的時(shí)候,會(huì)讓人不知道為什么修改顷窒,這個(gè)是可以通過(guò)this.$store.commit('increment')修改,相當(dāng)于增加了給代碼增加了注解源哩。官方不推薦直接修改鞋吉,同構(gòu)increment相當(dāng)于動(dòng)態(tài)變化跟蹤,利于代碼的閱讀励烦,

const store  = new Vuex.Store({
  state :{
    count:0
  },
  mutations:{
    increment(state){
      state.count++
    },
    decrement(state){
      state.count--
    }
  }
})
  • 使用對(duì)象提交
add() {
                this.$store.commit('increment', {data:1})
            },

//store.js
increment(state,n){
            state.count +=n.data
        },
  • 使用常量替換操作類(lèi)型(調(diào)用方法)
//store/index.js
    import {MUTATION_TYPE} from '../util/mutations-constant'
mutations: {
        [MUTATION_TYPE](state,n) {
            state.count += n.data
        },
       
    }

//Next.vue
    import {MUTATION_TYPE} from '../util/mutations-constant'
 add() {
                this.$store.commit(MUTATION_TYPE,{data:1})
            },

'mapState'使用

如果一個(gè)組件有多個(gè)狀態(tài)谓着,組件的狀態(tài)存放在store種,可以通過(guò)mapState來(lái)監(jiān)聽(tīng)變化(當(dāng)然可以通過(guò)計(jì)算屬性坛掠,但是官方說(shuō)的是計(jì)算屬性有些冗余)
官方例子

// store/index.js
const store  = new Vuex.Store({
  state :{
    count:0
  },
  mutations:{
    increment(state){
      state.count++
    },
    decrement(state){
      state.count--
    }
  }
})
export default  store



//next.vue
<template>
    <p>
        {{count}}
        {{countAlias}}
        {{countPlusLocalState}}
    </p>
</template>
export default {
        data() {
            return {
                localData: 10
            }
        },
        name: "Next",
        computed: mapState({
            count: state => state.count,  //1
            countAlias: 'count', //2
            countPlusLocalState(state) { //3
                return state.count + this.localData
            }
        }),
    }

1和2都是在組件種聲明一個(gè)屬性赊锚,對(duì)應(yīng)的是store種的state,3是定義的一個(gè)常規(guī)函數(shù),用來(lái)和本地?cái)?shù)據(jù)計(jì)算計(jì)算屉栓。

對(duì)象操作運(yùn)算符(我的理解是更加方便的寫(xiě)法舷蒲,更容易閱讀代碼),可以讓它與局部計(jì)算屬性混合使用
  computed: {
          //本地的其他一些計(jì)算方法
            ...mapState({
                count: state => state.count
            })
        },
getters函數(shù)的使用:根據(jù)某些條件過(guò)濾掉數(shù)組,例如購(gòu)物車(chē)中有許多商品友多,最終結(jié)算的時(shí)候要剔除掉那些用戶(hù)沒(méi)有勾選的商品牲平,而getters的左右是在store中過(guò)濾掉,避免在多個(gè)頁(yè)面寫(xiě)重復(fù)邏輯域滥。
// /stoe/index.js
const store = new Vuex.Store({
    state: {
        todos: [
            {id: 1, text: '...', done: true},
            {id: 2, text: '...', done: false}
        ]
    },
    getters:{
        doneTools :state => {
            return state.todos.filter(todo => todo.done)
        }
    }
})

使用

// /Next.Vue
methods: {
            getTodos() {
                console.log(this.$store.getters.doneTools)
            }
        }

getter中的方法可以相互調(diào)用纵柿,類(lèi)似java中的重載(也不一定是重載蜈抓,就是a方法可以調(diào)用b方法)

  getters:{
        doneTools :state => {
            return state.todos.filter(todo => todo.done)
        },
      tododoneTools(state,getter){
      return getter.doneTools  
    }
    }

getter方法的可以傳參昂儒,使用getters 根據(jù)id 查找數(shù)組中的元素
// /store/index.js
getters:{
      doneToolsId: state => (id) =>{
  return state.todos.find(todo => todo.id == id)    
}
}
mapGetters的使用是將store中的屬性映射到局部屬性中
// Next.vue

<template>
    <div>
        <button @click="getTodos">
            {{doneToolsCount}}
        </button>
    </div>
</template>

   import {mapState,mapGetters} from 'vuex'

  export default{
   name: "Next",
  computed:{
   ... mapGetters({
    'doneToolsCount'  //映射的 `/store/index.js`下的`getters`的`doneToolsCount`
})
}
}
action action其實(shí)調(diào)用的就是mutation,為什么不直接調(diào)用mutation,因?yàn)?code>mutation必須同步執(zhí)行沟使。而action 內(nèi)部可以執(zhí)行異步操作
  • action通過(guò)參數(shù)解構(gòu)來(lái)調(diào)用mutation

//store/index.js
import {MUTATION_TYPE} from '../util/mutations-constant'
mutations: {

    [MUTATION_TYPE](state,n) {
        state.count += n.data
    },
    reduce: (state, n) => {
        state.count -= n
    }
}
,
actions:{
    add({commit},n){
        commit(MUTATION_TYPE,n)
    }
}

//Next.vue
add(){
this.$store.dispatch(add,{data:1})
},

// store/index.js
 },
    mutations: {
        [MUTATION_TYPE](state) {
            state.count += 10

        }

    },
    actions: {
        [MUTATION_TYPE](context) {
            context.commit(MUTATION_TYPE)
        }
    }

// Next.vue
  methods: {
            getTodos() {
                this.$store.dispatch(MUTATION_TYPE)
            }
        }
modules可以不同模塊定義不同的store,例如登陸渊跋,購(gòu)物車(chē)
// store/index.js

const moduleLogin = {
    state: {
       username:"aaa",
        psw:'1111'
    },
}
const muduelCar = {
    state: {
        count:0,
        sumprice:0
    },
}

const store = new Vuex.Store({
    modules: {
        a: moduleLogin,
        b: muduelCar,
    }
})

export default store

//使用 Next.vue

        <button @click="getTodos">
           10

        </button>

  methods: {
            getTodos() {
      
                console.log(this.$store.state.a. username)
            }
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腊嗡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子刹枉,更是在濱河造成了極大的恐慌叽唱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件微宝,死亡現(xiàn)場(chǎng)離奇詭異棺亭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蟋软,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)镶摘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人岳守,你說(shuō)我怎么就攤上這事凄敢。” “怎么了湿痢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵涝缝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我譬重,道長(zhǎng)拒逮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任臀规,我火速辦了婚禮滩援,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘塔嬉。我一直安慰自己玩徊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布谨究。 她就那樣靜靜地躺著恩袱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胶哲。 梳的紋絲不亂的頭發(fā)上憎蛤,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音纪吮,去河邊找鬼俩檬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛碾盟,可吹牛的內(nèi)容都是我干的棚辽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼冰肴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屈藐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起熙尉,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤联逻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后检痰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體包归,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年铅歼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了公壤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椎椰,死狀恐怖厦幅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慨飘,我是刑警寧澤确憨,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站瓤的,受9級(jí)特大地震影響休弃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜堤瘤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一玫芦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦革半、人聲如沸管搪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至茫多,卻和暖如春祈匙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工夺欲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跪帝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓些阅,卻偏偏與公主長(zhǎng)得像伞剑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子市埋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • Vuex 的學(xué)習(xí)記錄 資料參考網(wǎng)址Vuex中文官網(wǎng)Vuex項(xiàng)目結(jié)構(gòu)示例 -- 購(gòu)物車(chē)Vuex 通俗版教程N(yùn)uxt....
    流云012閱讀 1,451評(píng)論 0 7
  • ### store 1. Vue 組件中獲得 Vuex 狀態(tài) ```js //方式一 全局引入單例類(lèi) // 創(chuàng)建一...
    蕓豆_6a86閱讀 726評(píng)論 0 3
  • 安裝 npm npm install vuex --save 在一個(gè)模塊化的打包系統(tǒng)中黎泣,您必須顯式地通過(guò)Vue.u...
    蕭玄辭閱讀 2,926評(píng)論 0 7
  • Vuex是什么? Vuex 是一個(gè)專(zhuān)為 Vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式缤谎。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件...
    蕭玄辭閱讀 3,106評(píng)論 0 6
  • ### store 1. Vue 組件中獲得 Vuex 狀態(tài) ```js //方式一 全局引入單例類(lèi) // 創(chuàng)建一...
    蕓豆_6a86閱讀 339評(píng)論 0 0