Vuex mapState mapGetters mapMutations mapActions

 

Vuex mapState mapGetters mapMutations mapActions

在computed或methods中使用,在模板语法中可简化state调用声明

<template>
  <div>
    <select v-model="unit">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="increment(unit)"></button>
    <button @click="decrement(unit)"></button>
    <button @click="increOdd(unit)">奇数加</button>
    <button @click="decreAsync(unit)">异步减</button>
    <!-- <h1>{{ $store.state.count }}</h1> -->
    <!-- <h1>{{ $store.getters.bigCount }}</h1> -->
    <h1>{{count}}</h1>
    <h1>{{ bigCount }}</h1>
    <h1>{{ prop1 }}</h1>
    <h1>{{ prop2 }}</h1>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations, mapActions } from "vuex";

export default {
  data: () => ({ unit: 1 }),
  computed:{
    // 对象写法
    // ...mapState({prop1:'prop1',p2:'prop2'}),
    // ...mapGetters({bigCount:'bigCount'})
    // 数组写法
    ...mapState(['count','prop1','prop2']),
    ...mapGetters(['bigCount'])
  },
  methods: {
    ...mapMutations({increment:'incre',decrement:'decre'}),
    ...mapActions({increOdd:'INCRE_ODD',decreAsync:'DECRE_ASYNC'})
  }
};
</script>

store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
// 注册Vuex插件
Vue.use(Vuex)

export default new Vuex.Store({
    // 修改数据的动作
    actions: {
        INCRE_ODD(context, payload) {
            context.state.count % 2 !== 0 && context.dispatch('INCRE_ASYNC', payload)
        },
        INCRE_ASYNC(context, payload) {
            setTimeout(() => {
                context.commit('incre', payload)
            }, 500);
        },
        DECRE_ASYNC(context, payload) {
            setTimeout(() => {
                context.commit('decre', payload)
            }, 500);
        }
    },
    // 操作数据的行为
    mutations: {
        incre(state, payload) {
            state.count += payload
        },
        decre(state, payload) {
            state.count -= payload
        }
    },
    // 初始化数据
    state: {
        count: 0,
        prop1:'prop1 value',
        prop2:'prop2 value'
    },
    getters:{
        bigCount(state){
            return state.count * 10
        }
    }
})
posted @   IslandZzzz  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2019-02-13 联系人与客户多对一配置&联系人列表&分页查询联系人
2019-02-13 CRM:异步加载下拉列表,三个列表出现同样的下拉框
点击右上角即可分享
微信分享提示