VueX起步(二恐锣、同步修改數(shù)據(jù))

  • 在腳手架創(chuàng)建時(shí)候選擇依賴要把vuex給選上表牢,(如果在腳手架忘記選了就npm i vuex或者yarn add vuex),我這里展示的是自己創(chuàng)建了一個(gè)叫vuex的文件夾里面也創(chuàng)建了一個(gè)store.js的文件沐悦。搭建好了會(huì)在src文件夾多一個(gè)叫store的文件夾成洗,這個(gè)文件夾里面有著index.js這個(gè)文件(為了后期維護(hù)方便,單一職責(zé)原理,所以選擇代碼分離)藏否。

  • store.js文件初始一般都是這樣

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

const state = {//狀態(tài)瓶殃,也可以理解成之前說(shuō)的模型數(shù)據(jù)
  
}

 const mutations ={//定義對(duì)state里面的操作

 }

export default new Vuex.Store({
       state,
        mutations
})

至于為什么這樣,下面再解釋吧副签。
假設(shè)現(xiàn)在我有一個(gè)同步修改的數(shù)據(jù)要處理遥椿,比如一個(gè)做加減法的摁扭,改變一個(gè)值淆储。

<template>

  <div class="hello">

    <button @click="increa">+</button>
    <p>數(shù)字:{{$store.state.count}}</p>
//不用加this
    <button @click="decrea">-</button>
  </div>
</template>

這里我增加了count這個(gè)常量冠场,所以要把它加入到倉(cāng)庫(kù)里面,并且給個(gè)初始值為0

const state = {//狀態(tài)本砰,也可以理解成之前說(shuō)的模型數(shù)據(jù)
  count: 0,
}

然后在模板那里也要export函數(shù)increa和decrea碴裙,實(shí)現(xiàn)加減。

<script type="text/javascript">
            increa:function () {
              //  this.$store.state.count++
              //不應(yīng)該是這樣点额,應(yīng)該是通過(guò)commit提交舔株,如果開啟vuex嚴(yán)格模式,就不允許直接修改倉(cāng)庫(kù)的state
              this.$store.commit('increa',{number:100})
            },
            decrea :function () {
              // this.$store.state.count--
              this.$store.commit('decrea',{number:100002})
            }

</script>

按理來(lái)說(shuō)还棱,應(yīng)該是可以用this.store.state.count++或者this.store.state.count--但是在vuex管理思想不是這樣载慈,應(yīng)該是通過(guò)commit進(jìn)行提交然后再store.js文件里面mutations就行處理。

const mutations ={//state為倉(cāng)庫(kù)對(duì)象珍手,paylod為commit時(shí)候傳入的載荷(負(fù)載)
     increa :function(state,paylod) {
         console.log(paylod);
         state.count+=paylod.number
    },
     decrea :function (state,paylod) {
         state.count--
         console.log(paylod);
     },

}

代碼優(yōu)化

  • 問(wèn)題一:$store.state办铡,假設(shè)我一個(gè)頁(yè)面要用很多次辞做,那我可不可以只寫一次?
  • 問(wèn)題二:decrea方法定義一次寡具,commit時(shí)候還得寫一次秤茅,是不是很麻煩?

問(wèn)題一:

//理想化
 <!--希望把倉(cāng)庫(kù)里面的數(shù)據(jù)state 可以當(dāng)做普通的模型變量晒杈,可以直接在頁(yè)面上使用-->
        <p>數(shù)字:{{ count }}</p>

1.// 需要從 vuex 里面導(dǎo)出一個(gè)函數(shù) mapState(作用嫂伞,可以把倉(cāng)庫(kù)里面的state映射到組件的 data 里面,要映射成計(jì)算屬性才可以) map 映射 State 狀態(tài): 把 state 里面的狀態(tài)隱射到組件的內(nèi)容使用拯钻,減少 this.$store.state

    import {mapState} from 'vuex';
//并且在export default里面加上 computed
 computed: mapState(['count']),
        /**
原理
         * mapState(['count']), 底層:
         * count: function(){
         *     return this.$store.state.count;
         *
         * }
         */

但是還有個(gè)小問(wèn)題哦帖努,假設(shè)computed里面原先就有一個(gè)我自己定義的函數(shù)列?那就

 computed: {
            // ... 使用 es6 的展開即可,并且給count取別名
          ...mapState({countAias: 'count'}),

            /**
             * mapState(['count']), 底層:
             * count: function(){
             *     return this.$store.state.count;
             *
             * }
             */
            // 之前存在一個(gè)自己的count
            count: function () {
                return '自己寫的count';

            },

這時(shí)候我用的話就是直接用了

  <p>store.state.count數(shù)字:{{ countAias }}</p>

這樣就不會(huì)和別人沖突了粪般。

問(wèn)題二:
如果可以把倉(cāng)庫(kù)里面的 mutations 映射到組件的 methods 里面拼余,則我們就可以直接修改 state
那我首先再導(dǎo)入這個(gè)

import {mapState, mapMutations} from 'vuex';

然后再export default那里寫

  methods: {
            ...mapMutations(['increa','decrea'])
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亩歹,隨后出現(xiàn)的幾起案子匙监,更是在濱河造成了極大的恐慌,老刑警劉巖小作,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亭姥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡顾稀,警方通過(guò)查閱死者的電腦和手機(jī)达罗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)静秆,“玉大人粮揉,你說(shuō)我怎么就攤上這事「П剩” “怎么了扶认?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)殊橙。 經(jīng)常有香客問(wèn)我辐宾,道長(zhǎng),這世上最難降的妖魔是什么蛀柴? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任螃概,我火速辦了婚禮,結(jié)果婚禮上鸽疾,老公的妹妹穿的比我還像新娘。我一直安慰自己训貌,他們只是感情好制肮,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布冒窍。 她就那樣靜靜地躺著,像睡著了一般豺鼻。 火紅的嫁衣襯著肌膚如雪综液。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天儒飒,我揣著相機(jī)與錄音谬莹,去河邊找鬼。 笑死桩了,一個(gè)胖子當(dāng)著我的面吹牛附帽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播井誉,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蕉扮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了颗圣?” 一聲冷哼從身側(cè)響起喳钟,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎在岂,沒(méi)想到半個(gè)月后奔则,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔽午,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年易茬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祠丝。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疾呻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出写半,到底是詐尸還是另有隱情岸蜗,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布叠蝇,位于F島的核電站璃岳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏悔捶。R本人自食惡果不足惜铃慷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜕该。 院中可真熱鬧犁柜,春花似錦、人聲如沸堂淡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至萤悴,卻和暖如春瘾腰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背覆履。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工蹋盆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人硝全。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓栖雾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親柳沙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岩灭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • vuex是一個(gè)狀態(tài)管理模式,通過(guò)用戶的actions觸發(fā)事件赂鲤,然后通過(guò)mutations去更改數(shù)據(jù)(你也可以說(shuō)狀態(tài)...
    Ming_Hu閱讀 2,016評(píng)論 3 3
  • 安裝 npm npm install vuex --save 在一個(gè)模塊化的打包系統(tǒng)中噪径,您必須顯式地通過(guò)Vue.u...
    蕭玄辭閱讀 2,926評(píng)論 0 7
  • vuex 場(chǎng)景重現(xiàn):一個(gè)用戶在注冊(cè)頁(yè)面注冊(cè)了手機(jī)號(hào)碼,跳轉(zhuǎn)到登錄頁(yè)面也想拿到這個(gè)手機(jī)號(hào)碼数初,你可以通過(guò)vue的組件化...
    sunny519111閱讀 8,008評(píng)論 4 111
  • Vuex是什么找爱? Vuex 是一個(gè)專為 Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件...
    蕭玄辭閱讀 3,106評(píng)論 0 6
  • 上一章總結(jié)了 Vuex 的框架原理泡孩,這一章我們將從 Vuex 的入口文件開始车摄,分步驟閱讀和解析源碼。由于 Vuex...
    你的肖同學(xué)閱讀 1,768評(píng)論 3 16