一.什么是Vuex
1.介绍:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。
2.理解: Vuex相当于一个仓库,每一个 Vuex 应用的核心就是 store(仓库),集中存储和管理应用的所有组件的状态.
二.什么是"状态管理模式"
- Vue Components:Vue组件。HTML页面上,负责接收用户操作等交互行为,执行dispatch方法触发对应action进行回应
- dispatch:操作行为触发方法
- actions:操作行为处理模块.可以执行异步代码,例如Ajax.该模块提供了Promise的封装,以支持action的链式触发。
- commit:状态改变提交操作方法。对mutation进行提交
- mutations:状态改变操作方法。是Vuex修改state的唯一推荐方法,该方法只能进行同步操作.
- state:页面状态管理容器对象.面显示所需的数据从该对象中进行读取,利用Vue的细粒度数据响应机制来进行高效的状态更新。
- getters:state对象读取方法.可以认为是state中的计算属性
Vue组件接收交互行为,调用dispatch方法触发action相关处理,若页面状态需要改变,则调用commit方法提交mutation修改state,通过getters获取到state新值,重新渲染Vue Components,界面随之更新
三.使用场景
1.中大型单页面开发应用
2.解决非父子之间的通讯问题,
3.提高用户体验,利用Vuex缓存后台数据-----缺点:刷新页面,数据会丢失,可以使用’'vue-persistedstate"插件解决
//引入插件
import createPersistedState from "vuex-persistedstate";
// 实例化
const store = new Vuex.Store({
plugins: [createPersistedState({
reducer(val){
return {
user: val.user
}
}
})]
4.基本用法
//引入Vue Vuex
import Vue from 'vue'
import Vuex from 'vuex'
//注册Vuex
Vue.use(Vuex)
//实例化 Store
export default new Vuex.Store({
//全局状态
state: {
cinemalist:[]
},
mutations: {
//修改数据
setCinemaAction(state,data) {
state.cinemalist=data
}
},
actions: {
//异步axios获取数据
getCinemaAction(store) {
axios({
url: "/gateway?cityId=310100&ticketFlag=1&k=653967",
method: "get",
headers: {
"X-Host": "mall.film-ticket.cinema.list"
}
}).then(res => {
store.commit("setCinemaAction",res.data.data.cinemas)
});
}
},
getters:{
topDatalist(state){
// 对上面的“全局状态”进行数据处理, 类似于vue中的计算属性
return state.cinemalist.slice(0,5)
}
},
})
注意:
vuex只能有一个store,
为了防止多人修改,我们切割成子store, 再合并成唯一一个大的store对象
数据我们可通过辅助函数的方式获取
import {mapState,mapGetters,mapActions} from "vuex"
export default {
computed:{
...mapState(["cinemalist"]),
...mapGetters(["topDatalist"]),
...mapActions(["getCinemaAction"])
}
}