Vuex是一个专门为Vuejs开发的状态管理模式,它采用集中式存储管理应用的所有组件状态,然后巴拉巴拉…
好了,用概念来解释概念那是大佬做的事,Vuex说白了就是一个保存多个组件的公共变量(你可以暂时把状态理解为变量)的一个对象,把这个对象封装在顶层的Vue实例中,以后不管哪个组件想用这些变量,都可以直接从中获得,或者是向其中写入新变量。
为什么要有这个东西呢?倘若现在你开发了许多个组件,组件1中的有些数据 组件2,3,4,5,6等等也需要使用,那么你准备怎么把这些数据传给它们?父子间通信?那如果这些组件的关系不是父子那么简单呢?在一个组件树里面,如果层数很高的组件向低层组件传数据,难道还要麻烦的一步一步传递?
这时你就会体会到Vuex的好了。
当然,你可能会觉得实现Vuex这个功能并不难啊,创建一个保存公告信息的对象不就行了:
let shareobj = {}
Vue.prototype.shareobj = shareobj
因为所有的组件包括Vue根实例都继承自Vue,因此只要Vue.prototype加入了shareobj,那么相当于所有的组件都能够使用这其中的数据,这不就行了吗?
哪有那么简单,事实上,Vuex还有一个最大的好处,那就是保存在Vuex中的数据都是响应式的,这保证了Vuex中的数据一旦发生更改,与之相关的所有数据都将监听到这个改动,并实时作出响应。
而用刚才那种prototype的方式,就不是响应式的了。
那么,说到这里,还要顺便提一句,什么样的状态适合保存在Vuex中呢?首先,并不是说只要组件共享的状态都需要保存在Vuex中,如果仍然是需要父子间通信就能获得的状态,那其实大可不必放在Vuex中,否则Vuex可能就会保存很多的状态导致不好管理,一般来说,那些需要在多个界面间共享的状态,比如用户的登录状态、头像、或者是商品收藏、购物车等适合保存在Vuex中。