• Vue技术-mapstart与mapGetters=》模块化+命名空间


    Vue技术-mapstart与mapGetters=》模块化+命名空间

    导入mapState

     import {mapState} from 'vuex'
    
    • 1

    使用mapState获取state内容,避免过多的字符串在模板里面堆砌
    借助mapStart生成计算属性,从start中读取数据(对象写法)

      computed:{
                bigSum(){
                    return this.$store.getters.bigSum
                },
                ...mapState({ name: 'name' })
                
            },
            mounted(){
                const x = mapState({name:'name'});
                console.log('x is',x);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    但是对于这段代码来说是es6的新语法规则,将一个数据对象的属性值给另一个对象

       ...mapState({ name: 'name' })
    
    • 1

    mapGetters就是获取getters数据

     computed:{
                // bigSum(){
                //     return this.$store.getters.bigSum
                // },
                ...mapGetters(['bigSum']),
                ...mapState({ name: 'name' })
                
            },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    他们有对象写法和数组写法,但特别注意的是这个字符串和变量的简写方式。

    四个map方法的使用

    1. mapState方法:用于帮助我们映射state中的数据为计算属性

      computed: {
          //借助mapState生成计算属性:sum、school、subject(对象写法)
           ...mapState({sum:'sum',school:'school',subject:'subject'}),
               
          //借助mapState生成计算属性:sum、school、subject(数组写法)
          ...mapState(['sum','school','subject']),
      },
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    2. mapGetters方法:用于帮助我们映射getters中的数据为计算属性

      computed: {
          //借助mapGetters生成计算属性:bigSum(对象写法)
          ...mapGetters({bigSum:'bigSum'}),
      
          //借助mapGetters生成计算属性:bigSum(数组写法)
          ...mapGetters(['bigSum'])
      },
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    3. mapActions方法:用于帮助我们生成与actions对话的方法,即:包含$store.dispatch(xxx)的函数

      methods:{
          //靠mapActions生成:incrementOdd、incrementWait(对象形式)
          ...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
      
          //靠mapActions生成:incrementOdd、incrementWait(数组形式)
          ...mapActions(['jiaOdd','jiaWait'])
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    4. mapMutations方法:用于帮助我们生成与mutations对话的方法,即:包含$store.commit(xxx)的函数

      methods:{
          //靠mapActions生成:increment、decrement(对象形式)
          ...mapMutations({increment:'JIA',decrement:'JIAN'}),
          
          //靠mapMutations生成:JIA、JIAN(对象形式)
          ...mapMutations(['JIA','JIAN']),
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    备注:mapActions与mapMutations使用时,若需要传递参数需要:在模板中绑定事件时传递好参数,否则参数是事件对象。

    模块化+命名空间

    1. 目的:让代码更好维护,让多种数据分类更加明确。

    2. 修改store.js

      const countAbout = {
        namespaced:true,//开启命名空间
        state:{x:1},
        mutations: { ... },
        actions: { ... },
        getters: {
          bigSum(state){
             return state.sum * 10
          }
        }
      }
      
      const personAbout = {
        namespaced:true,//开启命名空间
        state:{ ... },
        mutations: { ... },
        actions: { ... }
      }
      
      const store = new Vuex.Store({
        modules: {
          countAbout,
          personAbout
        }
      })
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
    3. 开启命名空间后,组件中读取state数据:

      //方式一:自己直接读取
      this.$store.state.personAbout.list
      //方式二:借助mapState读取:
      ...mapState('countAbout',['sum','school','subject']),
      
      • 1
      • 2
      • 3
      • 4
    4. 开启命名空间后,组件中读取getters数据:

      //方式一:自己直接读取
      this.$store.getters['personAbout/firstPersonName']
      //方式二:借助mapGetters读取:
      ...mapGetters('countAbout',['bigSum'])
      
      • 1
      • 2
      • 3
      • 4
    5. 开启命名空间后,组件中调用dispatch

      //方式一:自己直接dispatch
      this.$store.dispatch('personAbout/addPersonWang',person)
      //方式二:借助mapActions:
      ...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
      
      • 1
      • 2
      • 3
      • 4
    6. 开启命名空间后,组件中调用commit

      //方式一:自己直接commit
      this.$store.commit('personAbout/ADD_PERSON',person)
      //方式二:借助mapMutations:
      ...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'}),
      
      • 1
      • 2
      • 3
      • 4
  • 相关阅读:
    今年的中秋(好惨啊)
    使用 Spring Security 手动验证用户
    flink sql 使用
    Gitea 仓库事件触发Jenkins远程构建
    SwiftUI SQLite数据库存储使用教程大合集(2022年版)
    diffusion model(一):DDPM技术小结 (denoising diffusion probabilistic)
    阿里开发手册《SpringCloud Alibaba》
    一种表达了1/4的差值结构
    Mapbox加载arcgis的底图
    C如何调用python
  • 原文地址:https://blog.csdn.net/m0_46672781/article/details/125515377