1、
2、
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({
// 公共数据源 state: { count: 0 },
// 突变 mutations: { }, actions: { }, modules: { } })
(1) State
方 法 一:
方 法 二:
// 1、 import {mapState} from ‘vuex’ // 2、 computed:{ ...mapState([‘count’]) }
(2) Mutation 突变
点击实现隔一秒加1:
store.js
mutations: { add (state) { setTimeout(() => { state.count++ }, 1000) } },
父组件 App.vue
<template> <div> <my-addition></my-addition> <span>=================</span> <my-substraction></my-substraction> </div> </template> <script> import Addition from './components/Addition' import Substraction from './components/Substraction' export default { data () { return {} }, components: { 'my-addition': Addition, 'my-substraction': Substraction } } </script>
子组件 Addition. vue
<template> <div> <h3>最新count值:{{$store.state.count}}</h3> <button @click="handle">延时+1</button> </div> </template> <script> import { mapMutations } from 'vuex' export default { data () { return {} }, methods: { ...mapMutations(['add']), handle () { this.add() } } } </script>
点击延时+1按钮,会发现 count 的值还是初始值,未发生变化:
所以 不要在 mutations 突变中执行异步操作 (Action 用于处理异步操作)
(3)Action
如果通过异步操作变更数据,必须通过Action,而不能使用Mutation,但是在Action中还是要通过触发 Mutation 的方式间接变更数据。