本实例主要讲vuex一种简单使用方法,也是官网推荐的方法执行流程,涉及技术点vue2+vuex+axios。
vuex是vue应用的状态管理模式,说白了就是管理vue的一些状态信息,主要包括:
state/mapState
getters/mapGetters
mutations
actions
modules
想要具体了解vuex请访问官网
上代码:
store.js
export default {
state: {
messageList: [] //state初始化数据
},
getters: {
messageList: state => state.messageList //获取messageList数据
},
mutations: {
['GET_MESSAGE_LIST'](state, res) { //改变state中的数据
state.messageList = res.data.messageList; //赋值方式
// state = { ...state, messageList: res.data.messageList }//这中方式可以改变state中的状态,但是getters数据不同步,不知是ES6不支持还是什么原因?有了解的朋友帮忙解释下 不胜感激!
}
},
actions: {
getMessageList({commit}) {
Vue.prototype.$http.get('test/messageList.json') //这里是把axios写在原型上了,我是这么调用的,也有其他调用方式
.then(res => {
commit('GET_MESSAGE_LIST', res) 执行mutations方法
}).catch(function (error) {
console.log(error);
});
}
}
}
messageList.vue组件
<script>
import { mapGetters } from 'vuex'
export default {
data() {
return {}
},
computed: {
...mapGetters([ //把getters映射到组件内部数据即可使用
'messageList'
])
},
methods: {
submitGetMessageList(){
this.$store.dispatch('getMessageList');//$dispatch在vue2中已废除,此处用的是elementUI中的方法,触发actions
}
}
}
</script>
vuex mutations是唯一改变state的值,Action 提交的是 mutation,不是直接更改state状态,大概就是这么个流程!