vuex是专门为vue程序开发设计的一个状态管理工具。用通俗的语言描述这个状态管理,好比就是vue开发中多个组件要把要用到的共同的变量存放到一个对象当中,然后把这个对象放到顶层的vue实例中。多个组件也可以协同管理和方便的使用它。
状态管理在很多方面要用到,比如登录状态,商品收藏,购物车商品等。
Vuex状态管理是一个插件。所以必须执行命令:npm install vuex --save (生产模式也要用到,所以不是--save-dev)
安装完以后,可以在src文件夹中新建一个store名称的文件夹,里面存放一个index.js,只涉及到vuex状态管理代码的。
Vuex有五个核心概念:
state:vuex的基本数据,用来存储变量
geeter:从基本数据(state)派生的数据,相当于state的计算属性
mutation:提交更新数据的方法,必须是同步的(如果需要异步使用action)。Vuex的store状态更新唯一方式:提交mutation。
mutation主要包括俩个方面:1,字符串的事件类型(就是函数名称,这个事件会被commit)。2,一个回调函数,该回调函数的一个参数就是state。第二个参数及后面跟着的参数就是自定义的参数,称为载荷,payload。看下面截图使用情况。
action:Action 提交的是 mutation,而不是直接变更状态。 Action 可以包含任意异步操作。
modules:模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。
使用下面这两种方法操作数据:
dispatch:异步操作,写法: this.$store.dispatch('mutations方法名',值)
commit:同步操作,写法:this.$store.commit('mutations方法名',值)
Vuex的中的响应式规则:
Vuex中的state是响应式的。当state中数据发生改变时候,vue组件会自动更新。
但是vuex必须要遵守一下规则,定义的数据才有响应式。
1,要在初始化过程中定义在state对象中的数据才有响应式。
2,如果初始化完成以后,要在后期过程中添加数据,类似这种写法:state.xxx=xxx,这种写法是没有响应式的。
》1,Vue.set(obj,'新属性名称',新属性值)
》2,用新对象给旧对象赋值。
对于mutation,在里面的代码最好是同步操作代码,如上面状态管理流程图可知,异步操作最好在actions中执行。因为在mutation中我们通常有个devtools工具作为跟踪捕捉mutation信息来使用,如果是异步操作,这个工具就不能很好的进行跟踪捕捉信息了。
关于modules的使用: