每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。
Vuex 和单纯的全局对象有以下两点不同:
Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
state
用于保存所有所有组件的公共数据 单一状态树mutation
可以理解为store中的methods 状态更新的唯一方式
主要包括两个部分
字符串的事件类型(type)
一个回调函数(handler) 该回调函数的第一个参数是state 第二个参数是payload(载荷)
很多参数需要传递payload可以是对象,再从对象中取出相关信息getters
getters的返回值会根据它的依赖被缓存起来,且只有当他的依赖发生改变才会被重新计算
一个参数state,另一个参数可以使他本身
如果传进来的值不确定,那么无法return一个结果,
此时可以return一个函数function 传入需要计算的变量 再 return state.students.filter(s => s.age > age) 返回结果actions
actions和mutations,不同的地方
actions也是通过mutations提交 他的参数是 context(和store对象具有相同方法和属性)可以context.state
actions包含异步操作,mutations,包含同步操作,绝对不允许出现异步操作
在vue组件中,调用actions中的方法,用dispatch mutations和其他的用 commit
actions和mutations一样也支持传递payload
在actions中,可以将异步操作放在promise中,成功或失败后调用resolve或rejectmodules
将store分割成模块(module),每个模块有自己的 state.mutations.actions.getters
module中的mutations和actions,接收的第一个参数是局部对象的状态store
虽然定义在moduleA或B中,但是在调用的时候依然是通过this.$store.commit来直接调用的