一、vuex介绍
是一个专为vue.js应用程序开发的状态管理模式,采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化
是采用集中式管理组件依赖的共享数据工具,可以解决不同组件数据共享问题
注:
1. 修改state状态必须通过mutations
2. mutations只能执行同步代码,类似ajax,定时器之类的代码不能再mutations中执行
3. 执行异步代码,要通过actions,然后将数据提交给mutations才可以完成
4. state的状态即共享数据可以在组件中引用
5. 组件中可以调用actions
1.1项目初始化
创建一个新的脚手架项目
vue create 项目名(项目名不能有中文,不要有大写字母)
安装vuex,并安装到运行时依赖(即项目上线后还要用)
npm i vuex --save
在项目的main.js中引入vuex
import Vuex from ‘ vuex ’
在vue中注册vuex
Vue.use(Vuex)
创建store实例对象
const store = new Vuex.Store({ ...配置项 })
在根实例配置中(main.js)的store选项指向创建的store实例对象
1.2 state
是放置所有公共状态的属性,如果有一个公共的状态数据,只需要定义在state对象中
定义state
1.2.1插值表达式
在vue组件中,可以使用this.$store获取到vuex中的store对象实例,可以通过state属性获取到里面的状态数据
1.2.2计算属性
在vue组件中,可以将state属性定义到计算属性中
1.2.3辅助函数 mapState
可以把store中的数据映射到组件的计算属性中
用法:
1. 导入mapState
Import { mapSate } from ‘ vuex ’
2. 采用数组的形式引入state属性
mapState([ ‘ count ’ ])
以上用法得到的类似于:
3. 利用延展运算符将导出的状态映射给计算属性
1.3 mutations
state里的状态数据如果要修改,必须通过mutations,并且mutations必须是同步的操作,目的是形成数据快照
数据快照:一次mutation的执行,立即得到一种视图状态,因为是立即,所以必须是同步
定义mutations
mutations是一个对象,里面存放修改state的方法
在组件中调用mutations
如:
mutations里的方法中,第一个参数是state,第二个参数可以设置需要传的参数
辅助函数 mapMutations
和mapState类似,把位于mutations中的方法提取出来
作用类似于:
之后就可以直接使用里面的方法
注:Vuex中的mutations不能写异步,例如ajax请求
1.4 actions
负责进行异步操作
定义actions
1.4.1调用
在vue组件中,在方法里通过this.$store.dispatch(‘ actions里的方法名 ’)调用actions里的方法
传参调用
1.4.2辅助函数 mapActions
可以将action导入到组件中
1.5 getters
类似于vue的计算属性,从state中派生出的状态,依赖于state
例:
state:{
a :10,
b :20
}
getters:{
getSum:function( state ){
sum = state.a + state.b
return sum
}
}
\
1.5.1调用
1.5.2辅助函数mapGetters
1.6 module
使用单一状态树,所有的状态数据会集中到一个比较大的对象中,当项目变得越来越大的时候,Vuex会变得越来越难维护,所以有了Vuex的模块化
应用:
定义2个模块user和setting
user中管理用户的状态token
setting中管理应用的名称name
在vue组件中,可以分别显示这2个状态数据
注:分块后,获取子模块的状态数据,需要通过$store.state.模块名称.属性名来获取
也可以通过根级别的getters来调用
1.6.1命名空间
namespaced
默认情况下,模块内部的action,mutation,和getter是注册在全局命名空间中的,这样使得多个模块能够对同一个mutation或action做出响应(即不能有同名的方法)
为了保证内部模块的高封闭性,使用namespaced来设置
1.6.2使用带有命名空间的模块
①直接调用,方法名称里带上模块的属性名路径
②辅助函数 带上模块名