Tips on Vuex 1.0

寫了一個(gè)基于 Vue 1 和 iView 的前端項(xiàng)目饿序,用 Vuex 做了狀態(tài)管理勉失,分享一下 Vuex 比較重要的知識(shí)點(diǎn)和踩到的坑。有一些個(gè)人見解在里邊原探,不周之處希望大家批評(píng)指正乱凿。

Vuex 組成

Vuex in Vue.js
  • 一個(gè) Vuex 組件由三部分組成:
    • state: 狀態(tài)信息(包括應(yīng)用的屬性、狀態(tài)咽弦、數(shù)據(jù)等)
    • mutations: 對(duì) state 的操作(添加徒蟆、修改等)由 mutations 執(zhí)行而不是直接以賦值的形式修改。
    • actions: 應(yīng)用程序通過調(diào)用 actions 觸發(fā) mutations型型。(也可以直接dispatch一個(gè) mutation 后专,但是不建議這樣做。)

Vuex 原則

  • 在程序初始化的時(shí)候盡可能聲明全部的 state输莺,并且賦一個(gè)初始值。
  • action 不修改 state裸诽,而是 dispatch 一個(gè) mutation嫂用,如果有額外參數(shù),可以作為 payload 傳遞給 mutation 丈冬。
  • state 是只讀的嘱函,只有 mutation 可以修改 state,其余任何函數(shù)都無權(quán)修改埂蕊,也不應(yīng)該嘗試修改 state 往弓。直接對(duì) state 進(jìn)行的修改會(huì)影響 Vuex 對(duì)視圖更新的判斷疏唾。
  • 其實(shí)不必把所有的狀態(tài)信息全部放到 vuex 中,有一些組件局部的屬性可以不放在 vuex 中函似,比如:
    • 控制組件視圖中元素樣式的變量(比如 SPA 中控制導(dǎo)航欄的 active 狀態(tài)的變量)
    • 控制組件視圖中彈窗提示是否顯示的變量槐脏。
  • 這些變量本身只與視圖相關(guān),且不受其他組件的影響撇寞,也不需要暴露接口以供修改顿天,所以完全可以放在組件的 data 中,這樣做也可以從一定程度上減少代碼量蔑担。

Vuex 在項(xiàng)目中的目錄結(jié)構(gòu)與代碼劃分

Project Structure
  • 全局共享的 state 和 mutation 建議放在 store 中牌废,比如:登錄狀態(tài),access-token 啤握。
  • 某些組件自身的 state 較多鸟缕,或者 state 結(jié)構(gòu)比較復(fù)雜,可以為其單獨(dú)設(shè)置一個(gè) module排抬,降低全局 state 的結(jié)構(gòu)復(fù)雜度懂从。比如:用戶注冊(cè)組件。
  • 顯式的聲明 mutation-type 和 actions 有助于代碼的檢查和維護(hù)畜埋,開發(fā)者可以通過 mutation-types 文件清晰地了解到該項(xiàng)目包含哪些狀態(tài)(數(shù)據(jù))更新操作莫绣。
  • 一個(gè)運(yùn)用了 Vuex 的單頁(yè)應(yīng)用:


    vuex in SPA

遇到的問題

  1. <template> 之外調(diào)用 vuex 相關(guān)資源:

    • actions: 引入 actionsstore 后直接調(diào)用(組件內(nèi)不用引用 store )。(要傳遞 store 作為參數(shù))
    • state: 組件外引入 store 后使用 store.state 悠鞍,組件內(nèi)使用 this.$store.state 对室。
  2. Vuex 自動(dòng)為在 <template> 之中被調(diào)用的 action 傳遞了 store 對(duì)象,在其之外調(diào)用 action 時(shí)咖祭,要將 store 顯式的作為參數(shù)傳入以供函數(shù)使用(解構(gòu))掩宜。

    // 在 util 等 Vue 組件外的工具類中
    actions.updateDirList(store, response.data);
    
    // 在 Vue 組件內(nèi)
    actions.updateStatus(this.$store, status);
    
  3. Vuex 更新表單

    • 使用 on-change 事件觸發(fā) actions 用于更新與表單項(xiàng)對(duì)應(yīng)的 state
    • 保存在組件本地的 data 中么翰,提交時(shí)更改 state牺汤。
    • 切記不要直接更新 store.state ,會(huì)觸發(fā)錯(cuò)誤提示浩嫌。

附:文檔截圖




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末檐迟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子码耐,更是在濱河造成了極大的恐慌追迟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骚腥,死亡現(xiàn)場(chǎng)離奇詭異敦间,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門廓块,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厢绝,“玉大人,你說我怎么就攤上這事带猴∥艉海” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵浓利,是天一觀的道長(zhǎng)挤庇。 經(jīng)常有香客問我,道長(zhǎng)贷掖,這世上最難降的妖魔是什么嫡秕? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮苹威,結(jié)果婚禮上昆咽,老公的妹妹穿的比我還像新娘。我一直安慰自己牙甫,他們只是感情好掷酗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窟哺,像睡著了一般泻轰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上且轨,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天浮声,我揣著相機(jī)與錄音,去河邊找鬼旋奢。 笑死泳挥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的至朗。 我是一名探鬼主播屉符,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼锹引!你這毒婦竟也來了矗钟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤嫌变,失蹤者是張志新(化名)和其女友劉穎真仲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體初澎,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碑宴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片软啼。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖延柠,靈堂內(nèi)的尸體忽然破棺而出祸挪,到底是詐尸還是另有隱情,我是刑警寧澤贞间,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布贿条,位于F島的核電站,受9級(jí)特大地震影響增热,放射性物質(zhì)發(fā)生泄漏整以。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一峻仇、第九天 我趴在偏房一處隱蔽的房頂上張望公黑。 院中可真熱鬧,春花似錦摄咆、人聲如沸凡蚜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)朝蜘。三九已至,卻和暖如春涩金,著一層夾襖步出監(jiān)牢的瞬間谱醇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工鸭廷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枣抱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓辆床,卻偏偏與公主長(zhǎng)得像佳晶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讼载,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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

  • 安裝 npm npm install vuex --save 在一個(gè)模塊化的打包系統(tǒng)中轿秧,您必須顯式地通過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)碼咨堤,你可以通過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
  • Vuex 是什么? ** 官方解釋:Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式**议蟆。它采用集中...
    Rz______閱讀 2,296評(píng)論 1 10