什么时候使用 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 触发 mutations
method: {
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