Vuex练习

vuex

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

Vue.use(Vuex)

export default new Vuex.Store({
    // state相当于组件中的date啊,专门用来存放全局的数据
    state: { num: 0 },
    // 相当于vue里面的计算属性computed getters是全局的 computed是组件内的
    getters: {
        getNum(state) {
            return state.num
        }
    },
    // mutations 相当于组件中的methods,但它不能使用异步的方法(定时器、axios)
    mutations: {
        //让num 累加
        //payload 是一个一个形参,如果组件在commit时,有传这个参数过来,就存在
        // 如果没有传递过来,就是undefined
        increase(state, payload) {
            state.num += payload ? payload : 1;
        },
        // 让num 累减
        decrease(state) {
            state.num--;
        }
    },
    // actions专门用来处理异步,实际修改状态值的,依然是mutations
    actions: {
        // 点击‘减一’按钮后,放慢一秒后再去执行减法
        decreaseAsync(context) {
            context.commit('decrease')
        }
    },
    // 主模块,里面可以分很多子模块,每个子模块都有上面的属性,最后汇总在这里
    modules: {}
})
<template>
  <div id="app">
    <home></home>
    <about></about>
    <btn></btn>
  </div>
</template>

<script>
import Home from "@/views/Home";
import About from "@/views/About";
import Btn from "@/views/Btn";

export default {
  components: {
    Home,
    About,
    Btn,
  },
};
</script>
<style lang="less">
</style>
<template>
  <div>
    <button @click="$store.commit('increase', 2)">点击加1:</button>
    <button @click="$store.dispatch('decreaseAsync')">点击延迟减1:</button>
  </div>
</template>

<script>
export default {
  methods: {},
};
</script>
<style>
</style>
<template>
  <div class="home">
    <h2>Home组件的数字:{{ $store.getters.getNum }}</h2>
  </div>
</template>

<script>
export default {};
</script>
<template>
  <div class="about">
    <h2>About组件的数字:{{ $store.getters.getNum }}</h2>
  </div>
</template>
<script>
export default {
  computed: {},
};
</script>

Vuex练习
Vuex练习

上一篇:vuex详解


下一篇:「后端小伙伴来学前端了」为什么Vue在有了全局事件总线后还要引入Vuex呢?