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>