一、state
本质上“状态”就是数据,因为“数据驱动视图”
你可以把store理解成当前应用程序的“数据仓库”“数据银行”
作用: 用于定义可共享的数据(响应式的)
特点:当state发生变化时,那些使用了state的视图组件会自动更新
// 1、【不建议】直接修改store中数据
// this.$store.state.count++
// 2、【建议】使用$store.commit()提交并触发一个mutations方法去修改store数据
// this.$store.commit('study/changeCount', {type, step: 2})
使用$store.dispatch()派发并触发一个actions方法去调接口
二、getters
作用:相当于是vue的computed计算属性,常常用于对state变量进行二次计算。
特点1:当getters方法所关联的state变量发生变化时,getters方法才会重新计算。
特点2:子store的getters默认在根store的getters上可以直接访问(给人感觉貌似没有拆分)。
语法:xxxCal(state)
三、mutations
作用:vuex官方建议的一种用于修改state的方式
语法:在mutations中可以封装很多个用于修改state方法,其语法 xxxState(state,payload)
使用:在vue组件中,this.$store.commit('xxxState', '数据')
注意:mutations方法用于同步地更新state,不建议使用异步逻辑,比如定时器或调接口。为什么不建议使用异步逻辑呢?原因是devtools识别不了
四、actions
作用:vuex官方建议的一种用于与后端通信的方式
语法:在actions封装各种调接口的方法,其语法 xxxFetchApi(store, payload)
使用:actions方法用于调接口,在组件中 this.$store.dispatch('xxxFetchApi', '数据')
注意:我们只是建议actions方法用于调接口,事实上在actions方法也可以直接修改state。
五、什么是vuex?
vuex是vue技术栈中唯一的一个状态管理工具,用于管理vue应用程序中的数据。它的设计思想借鉴自Flux数据架构思想。(如果你能把vuex用好,那么理论上你的vue项目中的数据流应该是可预测的)
作用:实现组件之间的数据共享(功能实现);实现数据缓存(用户体验)
在vue项目中如何实现代理?(解决浏览器CORS对ajax跨域请求的阻塞)
1.配置BaseUrl
:axios.defaults.baseURL = '/api',作用是我们每次发送的请求都会带一个/api的前缀。
2.配置代理
dev: {
env: require('./dev.env'),
port: 8090,
autoOpenBrowser: true,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
target:'http://api.douban.com/v2', // 你请求的第三方接口
changeOrigin:true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
pathRewrite:{ // 路径重写,
'^/api': '' // 替换target中的请求地址,也就是说以后你在请求http://api.douban.com/v2/XXXXX这个地址的时候直接写成/api即可。
}
}
},
六、使用modules、namespaced这两个属性实现对store的拆分(思考:为什么要拆分?)
modules
作用:从vue项目管理的角度来思考,当多人协同开发时,我们希望把这个根store拆分成多个子store。好处是多人开发时彼此不干扰,其次便于代码的维护
namespaced
默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的——这样使得多个模块能够对同一 mutation 或 action 作出响应。
如果希望你的模块具有更高的封装度和复用性,你可以通过添加 namespaced: true 的方式使其成为带命名空间的模块。当模块被注册后,它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名。
七、四个map方法的使用
mapState
当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键
mapGetters
将 store 中的 getter 映射到局部计算属性:
mapActions
创建组件方法分发 action
mapMutations
创建组件方法提交 mutation