• Vuex


    1 、辅助函数
     
    • mapState

     ...mapState({
        a: state => state.some.nested.module.a,
        b: state => state.some.nested.module.b
      })

    简写带空间名称的字符串

    ...mapState('some/nested/module', {
        a: state => state.a,
        b: state => state.b
      })
    • mapActions

      ...mapActions([
        'some/nested/module/foo', // -> this['some/nested/module/foo']()
        selfDefine:'some/nested/module/  bar' // -> this['some/nested/module/bar']()
      ])

    简写带空间名称的字符串

     ...mapActions('some/nested/module', [
        'foo', // -> this.foo()
        'bar' // -> this.bar()
      ])
    创建基于命名空间的组件绑定辅助函数。其返回一个包含 mapState、mapGetters、mapActions 和 mapMutations 的对象。它们都已经绑定在了给定的命名空间上。
     
    更好的写法:
     1 import { createNamespacedHelpers } from 'vuex'
     2 
     3 const { mapState, mapActions } = createNamespacedHelpers('some/nested/module')
     4 
     5 export default {
     6   computed: {
     7     // 在 `some/nested/module` 中查找
     8     ...mapState({
     9       a: state => state.a,
    10       b: state => state.b
    11     })
    12   },
    13   methods: {
    14     // 在 `some/nested/module` 中查找
    15     ...mapActions([
    16       'foo',
    17       'bar'
    18     ])
    19   }
    20 }
    action 通过 store.dispatch 方法进行分发:
     
    乍一眼看上去感觉多此一举,我们直接分发 mutation 岂不更方便?实际上并非如此,还记得 mutation 必须同步执行这个限制么?Action 就不受约束!我们可以在 action 内部执行异步操作:
     
     
     mutation 必须同步执行这个限制么?Action 就不受约束!我们可以在 action 内部执行异步操作:
    actions: {
      incrementAsync ({ commit }) {
        setTimeout(() => {
          commit('increment')
        }, 1000)
      }
    }
     
    Actions 支持同样的载荷方式和对象方式进行分发:
    // 以载荷形式分发
    store.dispatch('incrementAsync', {
      amount: 10
    })
    
    // 以对象形式分发
    store.dispatch({
      type: 'incrementAsync',
      amount: 10
    })

    在组件中分发 Action

    你在组件中使用 this.$store.dispatch('xxx') 分发 action,或者使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用(需要先在根节点注入 store):

    import { mapActions } from 'vuex'
    
    export default {
      // ...
      methods: {
        ...mapActions([
          'increment', // 将 `this.increment()` 映射为 `this.$store.dispatch('increment')`
    
          // `mapActions` 也支持载荷:
          'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.dispatch('incrementBy', amount)`
        ]),
        ...mapActions({
          add: 'increment' // 将 `this.add()` 映射为 `this.$store.dispatch('increment')`
        })
      }
    }
     commit 和 dispatch的区别 = 一个异步操作与同步操作的区别。

    当你的操作行为中含有异步操作,比如向后台发送请求获取数据,就需要使用action的dispatch去完成了。其他使用commit即可。

  • 相关阅读:
    垃圾收集器
    垃圾收集算法
    动态绑定
    数据库连接池原理
    分布式事务:两段式提交(最终一致性)
    C# 推箱子游戏&对战游戏
    C# 结构体和类的区别
    C# 类&结构体&枚举
    C# 哈希表&列队&栈
    C# 数组&集合&泛型集合
  • 原文地址:https://www.cnblogs.com/it-Ren/p/10785368.html
Copyright © 2020-2023  润新知