本文在 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 属性中。