本文在 GitHub上的連接vue
昨天被問了一個問題:git
Vuex 的應用場景有什麼?何時適合使用 Vuex,何時不適合使用 Vuex?github
在當時,個人答案是通常人會回答的內容:vuex
global-event-bus
來實現;$emit
和 $on
;講道理說,這個答案也不算錯,當時我也只能回想起這些。cookie
但後來,我又想了想,其實還能夠更有針對性一些。session
例如,在如下場景裏,咱們應當使用 Vuex:異步
一、組件會被銷燬this
咱們能夠假設這樣一個場景:spa
解決辦法:code
sessionStorage
、cookies
之類的裏面,在 created
時從中讀取,destroyed
的時候寫入其中;global-event-bus
裏面;但事實上,最好的仍是存在 Vuex 裏:
$store.state
來調用,經過 commit()
來修改值;created
的時候,讀取存在 state 裏面的值,在 destroyed
的時候,寫回 state;這樣處理的優勢是解耦,不跟其餘組件打交道。
二、組件基於數據而建立
咱們能夠假設這樣一個場景:
v-if="$store.state.userInfo.superVIP
;那麼:
解決辦法:
global-event-bus
裏面來實現;三、多對多事件——多處觸發,影響多處
咱們能夠假設這樣一個場景:
true
時,那麼頁面風格爲白天(主要影響 v-bind:style
的值);false
時,那麼頁面風格爲晚上(同上);v-bind:style
的值;那麼:
this.$root.xx
來獲取這個變量,也是很麻煩的,並且很醜陋;解決辦法:
global-event-bus
來存儲這個變量,並使用它;$store.state.xxx
來獲取這個變量的值;$store.getters.yyy
來獲取某些基於這個值的,表示通用樣式(例如黑底白字)的對象;$store.commit()
來提交修改(好比在某些狀況下能夠禁止修改);$store.dispatch()
來獲取其餘風格的樣式,並經過 $store.state
和 $store.getters
來返回新風格的樣式;四、總結
總而言之,假如你須要 數據 和 組件 分離,分別處理,那麼使用 Vuex 是很是合適的。
相反,若是不須要分離處理,那麼不使用 Vuex 也不要緊。
好比某個數據只跟某組件打交道,是強耦合的。那麼這個數據就應該存放在該組件的 data 屬性中。