Vuex
Vuex 介绍
每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的**状态(state)**。Vuex 和单纯的全局对象有以下两点不同:
- Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
- 不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交**(commit)mutation**。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
我的理解: Vuex 相当于一个扩展板的bus
中介.起步虽相似,但功能更丰富.
Vuex 之 store
起步: 安装,引入,use
,创建状态仓库.在 Vue 实例中注入(把 store 写进去).一条龙服务.
1 | //创建仓库格式 |
mutations 改变状态:
直接通过this.$store.state.XXX
拿到状态
在 methods 中.定义一个函数通过this.$store.commit('xxx')
方法触发状态变更
actions 改变状态:
通过this.$store.dispatch(xxx)
调用
二者区别:
- 传入参数不同,mutations 传入
state
.actions 传入context
- 调用方式不同,前者
this.$store.commit('xxx')
.后者this.$store.dispatch(xxx)
- 函数要求不同.mutations 中只能有同步操作,actions 中可以有异步操作.
getters
有时需要对 mutations 处理后的 state 进行处理.
可以当做 vuex 的计算属性(computed).
1 | getters: { |
获取状态也就改为
1 | //在组件中 |
Vuex 状态管理流程
view–>actions–>mutations–>state–>view
新增
VueX 中
state
相当于data
getter
相当于computed
mutation
相当于methods
action
是异步的mutation
module
模块将上述进行封装分块
mapState 和 mapGetters
mapState
辅助函数仅仅是将 store 中的getter
映射到局部计算属性
1 | ...Vuex.mapState(['firstName', 'lastName']) |
store.commit('xxFirstName', 'jirengu')
提交 mutation 中 xxFirstName 的方法。
第一个参数是 state 中有的,后添加的 jirengu 是载荷payload
。
提交载荷(payload)
向store.commit
传入额外参数,即mutation
的载荷
1 | mutations:{ |
actions 中传入第一个参数是context
,第二个是payload
触发 action
1 | store.dispatch("increment"); |
moudle(模块化)
1 | const moduleA = { |