Vuex的核心概念的应用(state,getters,mutation,action)

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。个人理解Vuex有点类似我们h5里常用的localStorage 主要是用于存储项目开发时需要用到的一些公共数据,项目较小时推荐使用localStorage基本就够用了,当项目工程较大时,有较多需要扩展时建议使用Vuex,方便于我们的开发管理。接下来我们一步步仔细说明:

首先准备工作如下:

第一步:安装Vuex, 通过命令符工具,打开对应的vue工程,执行命令:

npm install vuex --save

 安装完成后如果出现了版本号的字样,基本上就是表示安装完成了,自己自信看一下命令行中的英文语句就明白了。

第二步:在vue工程的src目录下创建一个store目录并在store目录下创建一个index.js文件,接下来我们的重点开发就将会在这个index.js文件中完成。

第三步:在vue工程的核心文件main.js文件中引入刚刚创建的index.js文件,如下:

import store from './store';              //引入vuex文件


new Vue({
  el: '#app',
  router,
  store,     //引入store
  components: { App },
  template: '<App/>',
})

有人可能就要疑问了,为什我的引入路径是:'./store' 而不是 './store/index.js'  这里我说明一下,不需要指到index.js也可以,vue在路径识别是会默认识别到store下的index.js文件的。

 

准备工作完了那就开始开发了:

开发流程如下(核心概念:state,getters,mutations,actions):

第一步:引入vue和vuex,并执行Vue.use(Vuex),如下:

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);

有人可能会疑问为什么要执行Vue.use(Vuex),因为Vuex作为一个插件本身其实是一个对象,所以当我们执行Vue.use(Vuex)时相当于在install(注册) vuex这个对象。这一步很关键必须执行。详细的请了解Vue.use()

 

第二步:初始值定义(state)

首先定义一个state对象如下:

const state={
     parameter1: true,
     parameter2:0
};

设置的全局访问的state对象,所有的全局都可能用到的值都在这里进行定义,在所有的组件里你都可以通过 this.$store.state.parameter1的这种方式取出state中定义的值

 

第三步:监听(getters)

首先定义一个getters对象如下:

const getters = {   
    gettersFunction1(state) { 
       return state.parameter1
    },
    gettersFunction2(state){ 
       return state.parameter2
    }
};

在第二步中我们定义了state,但是我们不知道state中的值是否会变化,或者变化为多少了,此时我们就需要监听state的变化,vuex官方API提供了一个getters,和vue计算属性computed一样,来实时监听state值的变化,获取监听的结果我们可以通过:this.$store.getters.gettersFunction1this.$store.getters.gettersFunction2这种形式来取。

对象getters中的方法名:gettersFunction1和gettersFunction2 是随意命名的主要是用来承载parameter1和parameter2的。

 

第四步:修改(mutation)

首先定义一个mutation对象如下:

const mutations = {
    mutationFunction1(state) {
        state.parameter1 = true;
    },
    mutationFunction2(state) { 
        state.parameter1 = false;
    },
    mutationFunction3(state,num){ 
        state.parameter2+ = num;
    }
};

想要更改 第二步中state 中的值,唯一方法是提交 mutation,当我们在其他外部组件需要执行mutation这个对象里的函数时:只需要这样:this.$store.commit("mutations对象内的函数名")或this.$store.commit('mutations对象内的函数名','要传入的参数')这样就可以全局改变改变state的值了

 

第五步:修改mutation中的函数(action)

首先定义一个action对象如下:

 const actions = {
    actionFunction1(context) {  
        context.commit('mutationFunction1');
    },
    actionFunction3(context) {  
        context.commit('mutationFunction2');
    },
    actionFunction3(context,num){  
        context.commit('mutationFunction3',num)
    }
};

Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态。
  • Action 可以包含任意异步操作。

而在外部组件里进行全局执行actions里面方法的时候,你只需要用执行this.$store.dispatch('actions对象内的函数名')this.$store.dispatch('actions对象内的函数名','要传入的参数'),这样就可以全局改变改变state的值了

 

第六步:定义一个新的 Vuex对象,并将上面第二步到第五步定义的全局对象,放入新的Vuex对象中。如下:

const store = new Vuex.Store({
  state,
  getters,
  mutations,
  actions
});

 

第七步:暴露vuex对象,方便全局使用:

export default store;  

至此,完整的state,getters,mutation,action一套应用就此结束了,实际的开发基本原理就是如此了,我们可以根据自己的实际需要做一些调整。

 

额外说明:当我们要避免Vuex变得异常臃肿时,为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割,详细的请参考官网module

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值