vuex的使用

2019-05-05  本文已影响0人  Biao_349d
  1. 引入VUEX
npm install vuex --save
  1. 在main.js引入
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
  1. 注册
new Vue({
  store
})
  1. state
const state={
    count:1
}

使用

<h3>{{$store.state.count}}</h3>

-. 计算属性

<h3>{{count}}</h3>
computed:{
    count(){
        return this.$store.state.count;
    }
}
import {mapState} from 'vuex';
computed:mapState({
        count:state=>state.count
 })

或者
computed:mapState({
        count: 'count'
 })
computed:mapState(["count"])
  1. mutations
const mutations={
    add(state){
        state.count++;
    },
    reduce(state){
        state.count--;
    }
}

使用

<button @click="$store.commit('reduce')">-</button>
import { mapState,mapMutations } from 'vuex';
methods:mapMutations([
        'add','reduce'
])
<button @click="reduce">-</button>
  1. getters
const getters = {
    count:function(state){
        return state.count +=100;
    }
}

使用

computed:{
    ...mapState(["count"]),
    count(){
        return this.$store.getters.count;
    }
},
import { mapState,mapMutations,mapGetters } from 'vuex';
...mapGetters(["count"])
  1. actions
const actions ={
    addAction(context){
        context.commit('add',10)
    },
    reduceAction({commit}){
        commit('reduce')
    }
}

用法

 import { mapState,mapMutations,mapGetters } from 'vuex';
methods:{
    ...mapMutations([  
        'add','reduce'
    ]),
    ...mapActions(['addAction','reduceAction'])
},
mounted(){
  this.$store.dispatch('addAction', {});
},
  1. 使用
export default new Vuex.Store({
    state,mutations,getters,actions
})
  1. 模块
const moduleA = {
 state: { ... },
 mutations: { ... },
 actions: { ... },
 getters: { ... }
 }
const moduleB = {
 state: { ... },
 mutations: { ... },
 actions: { ... }
 }
 
const store = new Vuex.Store({
 modules: {
  a: moduleA,
  b: moduleB})

其中:

export default new Vuex.Store({
  // 通过modules属性引入login 模块。
  modules: {
    login: login
  },
 
  // 新增state, getters
  state: {
    job: "web"
  },
  getters: {
    jobTitle (state){
      return state.job + "developer"
    }
  }
})
// namespaced 属性,限定命名空间
export default {
  namespaced:true,
  state,
  mutations,
  actions,
  getters
}
 dispatch("login/changeName")
getters["login/localJobTitle"]
<script>
import {mapActions, mapState,mapGetters} from "vuex";
export default {
 // computed属性,从store 中获取状态state,不要忘记login命名空间。
 computed: {
  ...mapState("login",{
   useName: state => state.useName
  }),
 
   localJobTitle() {
    return this.$store.getters["login/localJobTitle"]
   }
 },
 methods: {
  changeName() {
   this.$store.dispatch("login/changeName", "Jason")
  },
  alertName() {
   this.$store.dispatch("login/alertName")
  }
 }
}
</script>
<script>
import {mapActions, mapState,mapGetters} from "vuex";
export default {
 computed: {
  // 对象中的state 和数组中的localJobTitle 都是和login中的参数一一对应。
  ...mapState("login",{
   useName: state => state.useName
  }),
  ...mapGetters("login", ["localJobTitle"])
 },
 methods: {
  changeName() {
   this.$store.dispatch("login/changeName", "Jason")
  },
  ...mapActions('login', ['alertName'])
 }
}
</script>
上一篇下一篇

猜你喜欢

热点阅读