vuex入门实例

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

  1. 新建一个vue项目(这里由于我们是讲解vuex,所以对于vue项目的创建我们不会讲解太详细);
  2. 项目创建后,然后安装vuex,使用命令:npm install vuex --save(安装vuex保存到本地)
  3. 执行npm run dev 启动项目,在浏览器输入:"localhost:8080";正常的话然后我们会看到项目的启动页,

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

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

 

然后我们就可以开始编写我们的vuex业务代码了,那么,我们的数据如何保存?

注:下面例子中的代码在后面

1、State

vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;

 

npm run dev  开启

 

 

2、Getters

Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改App.vue文件如下:

 

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

然后我们在页面显示:

3、Mutations

数据我们在页面是获取到了,但是如果我们需要修改year值怎么办?如果需要修改store中的值唯一的方法就是提交mutation来修改,我们现在App.vue文件中添加两个按钮,一个加1,一个减1;这里我们点击按钮调用addFun(执行加的方法)和reductionFun(执行减法的方法),然后在里面直接提交mutations中的方法修改值:

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

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

 

 

4、Actions

我们达到了修改store中状态值的目的,但是,官方并不推荐我们这样直接去修改store里面的值,而是让我们去提交一个actions,在actions中提交mutation再去修改状态值,接下来我们修改index.js文件,先定义actions提交mutation的函数:

 

然后我们去修改App.vue文件:

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

 

好了,我们这里已经实现了一个基本的vuex修改状态值的完整流程, 上面例子所用到的代码:

store/index.js:



import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);
const store = new Vuex.Store({
  state: {//state为全局访问的对象,我要存储的数据都放在该对象下
    userInfo: {id: 123456, name: '小王', birthday: 2010},
    year: new Date().getFullYear()
  },
  getters: {
    userAge: function (state) {
      return state.year - state.userInfo.birthday;
    }
  },
  mutations: {
    add: function (state) {
      state.year++;
    },
    reduction: function (state) {
      state.year--;
    }
  },
  actions:{
    increase: function (state) {
      state.commit("add");
    },
    decrease: function (state) {
      state.commit("reduction");
    },
  }
});

export default store;

App.vue:

<template>
  <div>
    <h1>{{this.$store.state.userInfo}}</h1>
    <h1>年龄:{{this.$store.getters.userAge}}岁</h1>
    <button @click="reductionFun">-</button>
    {{this.$store.state.year}}
    <button @click="addFun">+</button>
    &nbsp;&nbsp;&nbsp;
    <button @click="decreaseFun">∨</button>
    {{this.$store.state.year}}
    <button @click="increaseFun">∧</button>
  </div>
</template>
<script>
  export default {
    methods: {
      addFun: function () {
        this.$store.commit("add");
      },
      reductionFun: function () {
        this.$store.commit("reduction");
      },
      increaseFun: function () {
        this.$store.dispatch("increase");
        },
      decreaseFun: function () {
        this.$store.dispatch("decrease");
      }
    }
  }
</script>

man.js:

import Vue from 'vue'
import App from './App.vue'
import  store from  './store'

new Vue({
  el: '#app',
  store:store,
  render: h => h(App)
})

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值