vuex
是 vue 的一个状态管理工具,是多个组件依赖一个属性时使用。
-
比如A组件用到了 name 属性,B 组件也用到了 name 属性,在 name 改变时,A B 组件都有对应的业务逻辑,此时如果通过传值的方式,就会比较麻烦了,因为现在是两个组件,可能会有很多组件依赖同一个属性,还有就是存在local 缓存里面,这种方式解决了传值的问题,但是做到实时监听 local 里的数据变化又很麻烦,所以用到了vuex 。
-
在2.6版本出了observable,用法跟vuex一样,是在vue源码里的,不用额外下载,可以理解为简版vuex。
核心字段
state 存放字段
mutations 操作 state ,规定的是不能直接操作 state ,必须通过 mutations 里面的方法修改 state 的数据
getters 取 state 的数据时候的方法,可以用来做数据处理
actions 异步操作
modules 模块化状态管理,就是可以定义多个对象,里面都包含这些核心字段,意为多个 store
使用方法
第一种
-
dispatch 触发action
this.$store.dispatch('方法名',参数) -
commit 触发 mutations
this.$store.commit('方法名',参数)
第二种
通过map映射vuex的方法到组件中
...mapMutations(['mutations的方法名']) //这样定义完了以后就可以直接在组件使用mutations的方法
...mapActions(['actions的方法名']) //这样定义完了以后就可以直接在组件使用actions的方法
...mapGetters(['Getters的方法名']) //这样定义完了以后就可以直接在组件使用getters的方法
延伸
-
vuex的state是存在内存中的,是挂载在vue实例上的,所以页面刷新vue实例重新加载,数据就会恢复到初始状态。
-
local是物理存储,是文件形式的存储,所以vuex刷新会消失,local刷新不会消失。
这个问题在很久之前我就查过解决方法,但是基本都是大同小异,引用别的插件,当页面刷新时把vuex的state数据存在local里,刷新结束再从local取数据赋值给vuex的state。