深入了解vuex

115 阅读2分钟

什么是vuex

vuex是一个专为vue.js应用程序开发的状态管理模式

什么是状态管理

先了解下单向数据流 帮助我们更好地理解状态管理。平时我们写的简单vue文件中,包含data,template,methods这三个部分可以分别把data看作 state,驱动应用的数据源,也就是定义的变量; template 看作 view 以声明方式将 state 映射到视图, 显示变量; methods 看作 actions,响应在 view 上的状态变化

初步了解vuex中的state,getter,mutation,action

  1. state:定义变量 getters:获取变量
  2. mutations:同步执行对变量进行的操作 actions:异步执行对变量进行的操作 vuex中的mapState,
  3. mapGetters,mapActions,mapMutations均是辅助函数

如何使用

  1. mapState引入vuex以后 我们需要在state中定义变量,类似cue中的data,通过state来存放状态

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

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    name:'杨彤彤',
    age:18,
    sex:'女'
  },
  getters: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})


  1. 我们如果想着组件中使用name,age,sex这三个属性,props,methods,data和computed的初始化都是在beforeCreated和created之间完成的,所以我们要在computed使用
    <template>
  <div class='home'>
    <div>名字:{{name}}</div>
    <div>年龄:{{age}}</div>
    <div>性别:{{sex}}</div>
  </div>
</template>

<script>
  export default {
    computed: {
      name(){
        return this.$store.state.name
      },
      age(){
      return this.$store.state.age
    },
      sex(){
      return this.$store.state.sex
    }
    }
  }
</script>

  1. 当一个组件需要获取多个状态的时候,将这些状态都声明计算属性会有些许重复,为了解决这个问题,我们可以使用mapState来辅助完成计算属性
    <template>
  <div class='home'>
    <div>名字:{{name}}</div>
    <div>年龄:{{age}}</div>
    <div>性别:{{sex}}</div>
  </div>
</template>

<script>
  import {mapState} from 'vuex'
  export default {
    computed: {
      ...mapState(['name','age','sex'])
    }
  }
</script>

mapGetters vuex允许我们在store中定义getter

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

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    name:'杨彤彤',
    age:18,
    sex:'女'
  },
  getters: {
    realname(state){
      return state.name+state.age
    }
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

<template>
  <div class='home'>
    <div>{{realname}}</div>
  </div>
</template>

<script>
  import {mapGetters} from 'vuex'
  export default {
    computed: {
      ...mapGetters(['realname'])
    }
  }
</script>

以上是Vuex的基本用法,发布文章意在复习巩固以及分享知识,抛砖引玉,有写得不好的地方,望大佬们多多点播。如对你有帮助,也请不吝点赞,评论!