vuex之辅助函数mapState/mapGetters/ mapMutations/ mapActions使用

115 阅读1分钟

vuex 辅助函数

当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 辅助函数帮助我们生成计算属性;

mapState的几种写法使用

// 第一种 $store.state
 computed:{
        userInformation(){
            return this.$store.state.userInformation
        },
         userToken(){
            return this.$store.state.userToken
        },
    },
    
// 第二种
  computed:mapState([
       'userInformation',
        'userToken'
    ]),  
    
// 第三种  
  computed:mapState({
        'userInformation':state=>state.userInformation,
        'userToken':state=>state.userToken,
    })

// 第四种  使用展开运算符
  computed:{
        xxx(){
            return 'yyy'
        },
        // 注意:这种写法用mapstate等这种辅助函数的时候,前面的方法名和获取的属性名是一致的
        ...mapState([
            'userInformation',
            'userToken'
        ])
    },

mapGetters的几种写法使用

// 第一种 $store.getters
 computed:{
        xxx(){
            return 'yyy'
        },
        ...mapState([
            'userInformation',
            'userToken'
        ]),
        // 前面的方法名和获取的属性名可以不同
        userInfo(){
           return this.$store.getters.userInfo
        },
        userTk(){
           return this.$store.getters.userTk
        },
    },
    
// 第二种
 computed:{
        xxx(){
            return 'yyy'
        },
        ...mapState([
            'userInformation',
            'userToken'
        ]),
        // 注意:这种写法用mapGetters等这种辅助函数的时候,前面的方法名和获取的属性名是一致的
        ...mapGetters([
            'userInfo',
            'userTk'
        ])
    },


// 第三种
 computed:{
        xxx(){
            return 'yyy'
        },
        ...mapState([
            'userInformation',
            'userToken'
        ]),
        // userInfo 是一个重新定义的别名,'userInfo'不是字符串,而是对应的getter里面的方法名
        ...mapGetters({
            'userInfo':'userInfo',
            'userTk':'userTk'
        })
    },

mapMutations的几种写法使用

methods:{
  	...mapMutations([
       'userInformation',
       'userToken'
 	]),
 	xxx(){
 	 // 将 this.userInformation('fqniu') 映射为 this.$store.commit('userInformation','fqniu')
	 this.userInformation('fqniu')
     this.userToken('80859-abcc-403-81a9-c7d5341fqniu')
	}
}

// 第二种写法
methods:{
  ...mapMutations({
       // userInfo 是一个重新定义的别名,本组件可以直接调用这个方法名字使用
       'userInfo':'userInformation',
       'userTk':'userToken'
   }),
   xxx(){
 	 // 将 this.userInfo('fqniu') 映射为 this.$store.commit('userInformation','fqniu')
	 this.userInfo('fqniu')
     this.userTk('80859-abcc-403-81a9-c7d541fqniu')
	}
}

mapActions的几种写法使用

// 第一种 $store.actions
created(){
	this.$store.dispath('userInfo','fqniu')
	this.$store.dispath('userTk','80859-abcc-403-81a9-c7d5341fqniu')
},

// 第二种
methods:{
        // 注意:这种写法用mapActions等这种辅助函数的时候,前面的方法名和获取的属性名是一致的
        ...mapActions([
            'userInfo',
            'userTk'
        ])
  },


// 第三种
methods:{
        // userInfo 是一个重新定义的别名,挂载到this(vue)实例上,'userInfo'是actions里面的函数名称
        ...mapActions({
            'userInfo':'userInfo',
            'userTk':'userTk'
        })
 },