大家先看一下vuex的基本结构:
export default new Vuex.Store({
state: {
user:{
name:'clying'
}
},
getters: {
},
mutations: {
},
actions: {
}
})
如何读取user里面的name?
在前天之前,我都是这样使用的:this.$store.state.user.name。
如果你也是这样使用的,那你和我一样,都OUT了!!!
vuex的getters是用来读取数据的!
vuex的mutations和actions是用来更改数据的,一个是异步,一个是同步修改。
之前我也只是了解这么多,但是!BUT!当我在写这篇文章的时候,发现之前的我也只是纸上谈兵。
this.$store.user = JSON.parse(JSON.stringify(user))
emmmm,虽然知道了json格式的转换,但是依旧没用意识到vuex的强大!
好好看上面的那张图,vuex通过dispatch('方法名',参数)去调用actions里面的方法,actions通过commit去调用mutations里面的方法,在mutations里面对store里面的变量赋值,之后写入getters。组件通过访问getters里面的方法获得共享的数据。这才是vuex真正的数据赋值读取!也就是上图全是英文的单向数据流事件。
以下是一个简单的示例:
//组件内调用接口后获得的数据data存到store里的user
//赋值组件
this.$store.dispatch("UPDATE_USER", data); //1.触发actions,UPDATE_USER方法名
//store
export default new Vuex.Store({
state:{
user:{}
},
getters:{
user:user => state.user; //4.getters对外暴露,让组件读取
},
mutations:{
UPDATE_USER_MU:(state,userInfo) => {
state.user=userInfo; //3.在此真正修改state里面user的值
}
},
actions:{
UPDATE_USER:({commit},userInfo) => {
commit('UPDATE_USER_MU',userInfo); //2.commit触发mutatios
}
}
})
//其他组件
cosnolse.log(this.$store.getters.user) //5.读取vuex里面的值
看到这,深有体悟的就是仔细看文档emmmm。。。小伙伴们一起加油!!!