vuex入门
有些数据是多个页面共同需要,甚至都会修改的。这时候就需要统一的数据/状态管理,vuejs里面vuex负责。
基本原理:
所有数据 都保存在 vuex.State
可以直接读取,也可以通过getter 读取的同时作些计算
不能直接修改数据,需要commit Mutation / dispatch Action 来修改数据
(理由是响应数据变化,其实响应可以用监听的,监听/双向绑定可是vue强项,这里还是要限制双向绑定,避免数据修改太灵活)
Mutation 是同步函数,即时的修改 State
Action在mutation外面包一层,更灵活,例如异步的获得结果,再通过commit mutation修改数据
如果据只供单个页面使用,但也很复杂,多个函数读取修改,也需要vuex来管理,通过Module分成几个部分,每个部分类似
基本使用:
1 引入Vue 并使用 Vue.use(Vuex) 挂到 Vue上
2 创建 vuex 实例 store,并写好 state/mutation/action等
const store = new Vuex.Store({state/mutation/action...})
3 使用 Vue.prototype.$store = store 挂到 Vue上
( Vue.prototype.$store和全局引用,同样作用,uniapp官方示例和慕课网教程同时写,不研究了,暂且都写)
4 全局引入
const app = new Vue({
store,
...App
})
5 读取:
每个vue页面都可以使用 this.$store.state 直接读取 (响应式,会自动更新)
也可以在computed 里面包一层,
更普遍做法是 使用 mapStates 函数,展开到 computed 里面
更改:
修改数据 调用 this.$store.dispatch action 或者 this.$store.commit mutation(响应式,会同步到所有用到页面)
简便写法,使用 mapMutations / mapActions 展开到 methods里面调用