Vuex 是一个状态管理模式,它采用集中式存储,管理应用的所有组件的状态,
这个状态自管理应用包含以下几个部分:
- state,驱动应用的数据源;
- view,以声明方式将 state 映射到视图;
- actions,响应在 view 上的用户输入导致的状态变化。
任何时间,我们应用中的任何部分,在任何数据改变后,都不会留下变更过的记录。
为了解决这个问题,我们采用一个简单的 store 模式:
----------------------------------------------------------------
1.什么是
Store
?
-
Vuex
就是提供一个仓库,Store
仓库里面放了很多对象。其中state
就是数据源存放地,对应于与一般Vue
对象里面的data
(后面讲到的actions
和mutations
对应于methods
)。 -
在使用
Vuex
的时候通常会创建Store
实例new Vuex.store({state,getters,mutations,actions})
有很多子模块的时候还会使用到modules
。 -
总结,
Store
类就是存储数据和管理数据方法的仓库,实现方式是将数据和方法已对象形式传入其实例中。要注意一个应用或是项目中只能存在一个Store
实例!!
-----------------------------------------------------------------------------
关于三个点(对象展开运算符):
...他是怎么混入到外部对象的呢?
自己实验了一把:
既然mapState是一个函数并且返回的是一个对象,那么就类似于
function fn(){return {a:1,b:c}}
- 如果我直接写:
var test = {fn();} 必然是会报错的呀,这个时候就可以用到三个点…对象展开运算符(现处于 ECMASCript 提案 stage-3 阶段);
将fn()的返回值进行展开运算,但是…fn(),必须在一个外部对象里面执行 如果var test = {...fn()} 得到的结果就是:
test= {a: 1, b: 2}
- 就是把一个对象的key和value展开混入到另一个对象里面,由此想到对象的 深拷贝 ,如何将一个对象进行深拷贝的问题,又多出了一个答案:
var a ={id:1,user:'admin'}
//如何深拷贝a到b里面?
var b = {...a,info:'拷贝a的内容到b的对象里面',name:'快到碗里来'}