5分钟带你入门vuex(vue状态管理)

若是你以前使用过vue.js,你必定知道在vue中各个组件之间传值的痛苦,在vue中咱们可使用vuex来保存咱们须要管理的状态值,值一旦被修改,全部引用该值的地方就会自动更新,那么接下来咱们就来学习一下vuex是如何修改状态值的:vue

咱们新建一个vue项目(这里因为咱们是讲解vuex,因此对于vue项目的建立咱们不会讲解太详细);在命令行输入 webpack

vue init webpack web(使用webpack建立一个项目名为web的项目);web

项目建立后,而后安装vuex,使用命令:npm install vuex --save(安装vuex保存到本地),安装成功后你会看到这个界面:vuex

而后咱们执行npm run dev 启动项目,在浏览器输入:"localhost:8080";正常的话而后咱们会看到项目的启动页,npm

看到这个界面说明项目启动成功,而后咱们在项目的src目录下新建一个目录store,在该目录下新建一个index.js文件,咱们用来建立vuex实例,而后在该文件中引入vue和vuex,建立Vuex.Store实例保存到变量store中,最后使用export default导出store:浏览器

而后咱们在main.js文件中引入该文件,在文件里面添加 import store from ‘./store’;,再在vue实例全局引入store对象;缓存

而后咱们就能够开始编写咱们的vuex业务代码了,那么,咱们的数据如何保存?函数

State:学习

vuex中的数据源,咱们须要保存的数据就保存在这里,能够在页面经过 this.$store.state来获取咱们定义的数据;this

这时候咱们页面上就获得了这个count值1:

Getters:

Getter至关于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被从新计算,这里咱们能够经过定义vuex的Getter来获取,Getters 能够用于监听、state中的值的变化,返回计算后的结果,这里咱们修改Hello World.vue文件以下:

再修改index.js文件以下,其中getters中的getStateCount方法接收一个参数state,这个参数就是咱们用来保存数据的那个对象;

而后咱们在页面显示:

Mutations:

数据咱们在页面是获取到了,可是若是咱们须要修改count值怎么办?若是须要修改store中的值惟一的方法就是提交mutation来修改,咱们如今Hello World.vue文件中添加两个按钮,一个加1,一个减1;这里咱们点击按钮调用addFun(执行加的方法)和reductionFun(执行减法的方法),而后在里面直接提交mutations中的方法修改值:

修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法以下:

页面上点击+、- 按钮操做数据:

点击 “+”按钮

执行成功,咱们再连续点击三次减 “-” 按钮

ok!完美。

Actions:

咱们看到,当点击三次后值从2变成了-1;页面上的值是改变了;咱们达到了修改store中状态值的目的,可是,官方并不介意咱们这样直接去修改store里面的值,而是让咱们去提交一个actions,在actions中提交mutation再去修改状态值,接下来咱们修改index.js文件,先定义actions提交mutation的函数:

而后咱们去修改Hello World.vue文件:

这里咱们把commit提交mutations修改成使用dispatch来提交actions;咱们点击页面,效果是同样的。

好了,咱们这里已经实现了一个基本的vuex修改状态值的完整流程,若是咱们须要指定加减的数值,那么咱们直接传入dispatch中的第二个参数,而后在actions中的对应函数中接受参数在传递给mutations中的函数进行计算:

这个时候咱们再去点击“ - ”按钮就会发现再也不是减1了,而是减去10了。

mapState、mapGetters、mapActions

若是咱们不喜欢这种在页面上使用“this.$stroe.state.count”和“this.$store.dispatch('funName')”这种很长的写法,那么咱们可使用mapState、mapGetters、mapActions就不会这么麻烦了;

咱们修改Hello World.vue文件以下:

此时咱们在页面使用count1调用:

正常显示,效果是同样的,咱们就能够再也不使用很长的写法来调用了。

相关文章
相关标签/搜索