• vuex


    <!-- store.js -->
    import Vue from 'vue'
    import Vuex from 'vuex'
    Vue.use(Vuex)
    
    export default new Vuex.Store({
      state: {
        count: 0
      },
      // 只有 mutations 中定义的函数,才有权利修改 state 中的数据
      mutations: {
        add(state) {
          // 不要在 mutations 函数中,执行异步操作
          state.count++
        },
        addN(state, step) {          //函数传参
          state.count += step
        }
      },
      actions: {
        addAsync(context) {
          setTimeout(() => {
            // 在 actions 中,不能直接修改 state 中的数据;
            // 必须通过 context.commit() 触发某个 mutation 才行
            context.commit('add')
          }, 1000)
        },
        addNAsync(context, step) {
          setTimeout(() => {
            context.commit('addN', step)
          }, 1000)
        }
      },
      getters: {         //包装数据   //Getter 可以对 Store 中已有的数据加工处理之后形成新的数据,类似 Vue 的计算属性。
        showNum(state) {              //Store 中数据发生变化,Getter 的数据也会跟着变化。
          return '当前最新的数量是【' + state.count + '】'
        }
      }
    })
    
    <!--组件调用修改公共数据数据方式一  Addition.vue -->
    <template>
      <div>
        <!-- <h3>当前最新的count值为:{{$store.state.count}}</h3> -->
        <h3>{{$store.getters.showNum}}</h3>
        <button @click="btnHandler1">+1</button>     //组件点击事件改变公共数据
        <button @click="btnHandler2">+N</button>
        <button @click="btnHandler3">+1 Async</button>
        <button @click="btnHandler4">+N Async</button>
      </div>
    </template>
    <script>
    export default {
      data() {
        return {}
      },
      methods: {
        btnHandler1() {
          this.$store.commit('add')
        },
        btnHandler2() {
          // commit 的作用,就是调用 某个 mutation 函数
          this.$store.commit('addN', 3)
        },
        // 异步地让 count 自增 +1
        btnHandler3() {
          // 这里的 dispatch 函数,专门用来触发 action
          this.$store.dispatch('addAsync')
        },
        btnHandler4() {
          this.$store.dispatch('addNAsync', 5)
        }
      }
    }
    </script>
    
    <!--组件调用修改公共数据数据方式二  Addition.vue -->
    <template>
        <div>
          <!-- <h3>当前最新的count值为:{{count}}</h3> -->
          <h3>{{showNum}}</h3>
          <button @click="btnHandler1">+1</button>
          <button @click="addN(3)">+N</button>
          <button @click="addAsync">+1 Async</button>
          <button @click="addNAsync(5)">+N Async</button>   //异步传参
        </div>
      </template>
      <script>
      import { mapState, mapMutations, mapActions, mapGetters } from 'vuex'   
      export default {
        data() {
          return {}
        },
        computed: {
          ...mapState(['count']),       //相当于自己组件的数据
          ...mapGetters(['showNum'])
        },
        methods: {
          ...mapMutations(['add', 'addN']),   //映射声明,结构后,相当于自己的函数
          ...mapActions(['addAsync', 'addNAsync']),
          btnHandler1() {
            this.add()
          }
        }
      }
      </script>
    
  • 相关阅读:
    【BZOJ】【1412】【ZJOI2009】狼和羊的故事
    【POJ】【2987】Firing
    【BZOJ】【1324】王者之剑
    【POJ】【2125】Destroying the Graph
    bzoj4870: [Shoi2017]组合数问题(DP+矩阵乘法优化)
    bzoj3810: [Coci2015]Stanovi(记忆化搜索)
    bzoj2120: 数颜色(BIT套主席树+set/分块)
    bzoj2144: 跳跳棋(二分/倍增)
    bzoj4552: [Tjoi2016&Heoi2016]排序(二分+线段树)
    bzoj4773: 负环(倍增floyd)
  • 原文地址:https://www.cnblogs.com/xm0328/p/13783107.html
Copyright © 2020-2023  润新知