什么时候使用 vuex?
- 当一个组件需要多次派发事件时
- 跨组件、页面共享数据
如:
- 状态栏高度
- 请求基地址
- 图片基地址
- 登录状态
- 用户信息
- 购物车
- 选择东西后,返回界面,会更新你选择的东西(避免每次进入页面都重新请求)
vuex执行过程:
组件派发任务给 actions,actions 触发 mutations 中的方法,
mutations 来改变 state 中的数据,数据变更后响应推送给组件,组件重新渲染vuex核心:
state:储存共享的数据
state: {token: '',变量名: null}
mutations:修改state中的数据,处理本地缓存
mutations: {方法名(state, params){state.变量名 = params}}// 在方法中,通过 commit 提交给 mutations 修改 state 的状态method: {open() {this.$store.commit("方法名", 参数);}}
actions:异步调用接口获取数据,通过 dispath 派发给 actions,让 actions 触发 mutations
actions: {async 方法名({ commit }, data) {const res = await 接口名(data)if (res.code === 1) {commit('mutations中的方法名', res.data)}return res;}}// 在方法中使用:通过 dispath 派发给 actions,让 actions 触发 mutationsmethod: {open() {this.$store.dispath('方法名', 参数)}}
getters:用于获取state中的数据,可以进行修饰(相当于计算属性)
getters: {方法名: state => {if (state.变量名 && Objdect.keys(state.变量名))return state.变量名} else {return uni.getStoragesSync('键名') || {}}}}// 在计算属性中使用computed: {this.$store.getters.方法名},
modules 将store按功能分割成模块
每个模块拥有自己的 state、mutations、actions、getters
