- 什么是vuex? 个人理解就是管理数据的仓库(例如图书馆的管理员角色)
- 初始化步骤:
- 首先创建 vue项目 vue create vuex_project
- 接着安装vuex 插件 npm i vux --save
- 创建store文件夹放入index文件 index文件1.导入vue和vuex 2.使用vux 3.创建对象并对外默认暴露
- 在实例对象中导入 store 对象内接收store
- 到这里 vuex 的初始化配置基本完成
- 使用步骤:
- store中的 state是放置所有公共状态的属性,所有我们把需要用到的公共数据放在state中,其他组件调用即可 调用方法有两种:1.插值 2.计算属性:
- 插值调用:直接在需要用到的地方{{this.$store.state.count}} (count为值)即可。简单粗暴!
- 计算属性:把state中的值引入到组件的compute中,当成计算属性用。首先需要导入vuex中的mapstate,接着在computed采用数组的形式中引入数据 ...mapstate(['count']),调用直接<div>{{count}}</div>
- 首先在store中创建mutations 定义 add(state){state.count++} 这里的参数永远都是state
- 然后在组件中调用 通过btnadd(){this.$store.commit('add')}固定写法!
- Mutation 中还可以带参数,只需要在mutations 中的方法中放第二个参数即可,调用mutation时,也需要传入参数,例:addN(state,step){state.count +=step} btnaddN(){this.$store.commit('addN',2)这样就能实现触发btnaddN函数 count每次加2
- 上面的修改数据方法是简单粗暴法,下面介绍复杂法
- 修改数据与调用数据一样都有两种方法,第二种计算属性 首先引入 mapMutations 接着在方法中 ...mapMutation(['sub'],['subN'])导入这两种方法,导入后就可以当成普通方法使用,如:@click="sub"、btnSubN(){this.subN(2)}
- 异步处理使用 Action 如果想要延迟处理,不能在mutation中,mutation只能同步处理,异步处理要使用action,但是action不能修改数据,需要调用mutation来修改数据。使用方法:store中 在Action内添加方法,通过定时器调用mutation中的方法,在组件中使用dispatch触发Action中的异步方法,实现异步处理。注意点:commit只能用来触发mutation中的方法,dispatch只能用来触发Action中的方法。如果异步处理需要传参,则需要在Action方法中定义第二个参数step用于传递参数,之后从mutation中调用需要传参的方法,最后通过组件中dispatch触发Action中的方法来实现。总结:这几个方法各司其职,通过相互调用的方式实现数据操作,容易乱,需要理解好才能合理使用。
- 同样的 Action方法的调用也有第二种方式,组件中导入Action,将需要用到的Action方法按数组的形式映射到组件中,在组件中即可当成自己的方式使用。
- gatters的使用,如果需要对state修饰,那就可以使用gatters,gatters可以对数据进行修饰,但是必须要有参数和返回值,参数固定是state,在调用时也同样有两种方式,1.插值 直接使用this.$store.gatters.值 进行调用,注意:如果在template中则可以省略this.。2.全局映射。插件导入mapGatters ,在计算属性中通过映射gatters中的方法,就可以在组件中当成计算属性来使用。gatters相当于计算属性
总结:vuex的属性有
- state 用于保存全局属性
- mutations 用于修改全局属性
- actions 用于异步处理全局属性
- getter 用于修饰全局属性
这些属性的调用都有两种方法:1.插值 2.全局映射。我建议如果是简单的操作可以使用插值,复杂的话就使用全局映射。
插值方法就是直接将数据通过 this.$store的方法插入。全局映射需要先按需导入需要的vux属性,再通过数组的形式映射对应的方法,映射进来的方法可以当成自己的使用
vuex不难,就是属性之间的调用比较麻烦,需要多做练习来熟练使用!!!