vuex的五大辅助函数使用技巧

vuex的五大辅助函数使用技巧

vuex时vue的一个全局状态管理文件,又称全局数据共享,在这里定义的数据,我们在任何文件中都可以访问的到,为我们的项目带来极大的好处,以下是我定义在全局状态文件数据,所有示例均已这个为基础访问

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    data:{
      numbervalue:5,
      action_data:''
    }
  },
  getters:{
    dbclick(state){
      console.log(state,"state")
      return state.data.numbervalue*2
    },
  },
  mutations: {
    // 接收两个参数 一个参数为state , 另一个为载荷 且大部分为对象 因为对象可以传任何数据
    montify(state,payload){
      state.data.numbervalue=payload.val
      console.log("载荷",payload)
    },
    action(state,payload){
      console.log("打印",state)
      state.data.action_data=payload
    }
  },
// Action 类似于 mutation,不同在于:
// - Action 提交的是 mutation,而不是直接变更状态。
// - Action 可以包含任意异步操作
// Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用,实践中,我们会经常用到 ES2015 的[参数解构](https://github.com/lukehoban/es6features#destructuring)来简化代码
  actions: {
    prodect({commit},payload){
      // let url = 'https://api.apiopen.top/getWangYiNews' 
      console.log("payload",payload)
      let url ='http://httpbin.org/get'
      return new Promise((resolve,reject)=>{
        axios.get(url).then((res)=>{
          resolve(res.data)
          console.log(res)
          commit('action',res.data)
        }).catch((err)=>{
          console.log("报错")
          reject(err)
        })
      })
    }
  },
  modules: {
  }
})
import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'

1.mapState

mapState 函数返回的是一个对象。通常,我们需要使用一个工具函数将多个对象合并为一个,以使我们可以将最终对象传给 computed 属性。自从有了对象展开运算符,我们可以极大地简化写法:

 computed: {
      // 使用对象展开运算符将此对象混入到外部对象中
      ...mapState(['data']),
    },

这样一来,我们便可以轻松的访问state中的数据 :例如我们可以这样

 <div>
      <h2>{{data.numbervalue}}</h2>
  </div>

但在以前我们通常是这样访问的

<div>
      <h2>{{$store.state.data.numbervalue}}</h2>
  </div>

一个两个还好,看不出什么问题,但如果属性或者数据过多时,我们还要一边一边的写重复的代码,降低工作效率,但辅助函数的出现,大大的节约了我们的开发效率

2.mapGetters

mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性,因此你可以这样来使用他

 computed: {
      ...mapGetters(['dbclick'])
    },

是不是很简单,我们再来看看以往的写法,它需要我们自己手动添加计算属性

computed: {
  donedbclick () {
    return this.$store.getters.dbclick
  }
}
<h2>
    {{dbclick}}  或者  {{donedbclick}}
</h2>

3.mapMutations

使用 mapMutations 辅助函数将组件中的 methods 映射为 store.commit,其原理就是将this.montify 映射为this.$store.commit(‘montify’)

 methods: {
      ...mapMutations(['montify']),
    },

也可以这样写

methods:{
    example(){
    	this.$store.commit('montify',payload)
	}
}
<h2 @click="montify(payload)">
    点击触发
</h2>
或者
<h2 @click="example">
    点击触发
</h2>

4.mapActions

在组件中使用 this.$store.dispatch('prodect') 分发 action,或者使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用

methods: {
      ...mapActions(['prodect']),
      request(){
        this.prodect({name:'张三'}).then((result) => {
            //请求发送成功后的回调数据
          console.log("result",result)
        }).catch((err) => {
          
        })
      }
      request2(){
        this.$store.dispatch('prodect',{name:'张三'}).then((res)=>{
          console.log("res",res)
        })
      }
    //以上方法都是可以的,看自己的喜好
    },
<h2 @click="prodect(payload)">
    发送请求
</h2>
或者
<h2 @click="request">
    发送请求
</h2>
又或者
<h2 @click="request2">
    发送请求
</h2>
### Vuex 常见辅助函数及其用法 Vuex 提供了一组辅助函数,旨在简化对 Store 中状态 (`state`)、获取器 (`getters`)、动作 (`actions`) 和变异 (`mutations`) 的访问。这些辅助函数包括 `mapState`、`mapGetters`、`mapMutations` 和 `mapActions`,它们可以通过解构赋值的方式将 Vuex 方法映射到组件的计算属性或方法中[^1]。 #### 1. `mapState`: 映射 State 到计算属性 `mapState` 函数用于将 Vuex Store 中的状态映射到组件的计算属性中。这使得可以直接在模板中使用这些状态而无需手动编写 getter 方法。 ##### 示例代码: ```javascript import { mapState } from 'vuex'; export default { computed: { ...mapState(['count', 'username']), // 将 state.count 和 state.username 映射为局部计算属性 customComputed() { return `${this.count} times by ${this.username}`; } } }; ``` 当需要自定义键名时,可以传递一个对象作为参数: ```javascript ...mapState({ myCount: 'count', user: 'username' }) ``` #### 2. `mapGetters`: 映射 Getters 到计算属性 `mapGetters` 用于将 Vuex Store 中的 Getter 映射到组件的计算属性中。Getter 类似于 Vue 组件中的计算属性,通常用来处理经过加工后的状态数据[^3]。 ##### 示例代码: ```javascript import { mapGetters } from 'vuex'; export default { computed: { ...mapGetters(['getterUpdateName']) // 将 store.getters.getterUpdateName 映射为局部计算属性 } }; ``` 同样支持重命名: ```javascript ...mapGetters({ processedName: 'getterUpdateName' }) ``` #### 3. `mapMutations`: 映射 Mutations 到 Methods `mapMutations` 用于将 Vuex Store 中的 Mutation 映射到组件的方法中。Mutation 是更改 Vuex Store 状态的唯一途径,并且必须是同步的操作[^4]。 ##### 示例代码: ```javascript import { mapMutations } from 'vuex'; export default { methods: { ...mapMutations(['addAge']), // 将 store.commit('addAge') 映射为 this.addAge() handleAddition(payload) { this.addAge(payload); // 调用 mutation addAge 并传递 payload 参数 } } }; ``` 也可以绑定额外的上下文: ```javascript ...mapMutations({ updateLocalAge: 'addAge' // 自定义名称 }) ``` #### 4. `mapActions`: 映射 Actions 到 Methods `mapActions` 用于将 Vuex Store 中的 Action 映射到组件的方法中。Action 类似于 Mutation,但它主要用于处理异步操作[^4]。 ##### 示例代码: ```javascript import { mapActions } from 'vuex'; export default { methods: { ...mapActions(['fetchUserData']), // 将 store.dispatch('fetchUserData') 映射为 this.fetchUserData() triggerFetch() { this.fetchUserData(); // 执行 action fetchUserData } } }; ``` 同理,也支持重新命名: ```javascript ...mapActions({ loadUserDetails: 'fetchUserData' }) ``` --- ### 总结 通过以上四种辅助函数Vuex 大幅减少了样板代码的数量,使开发者能够更加专注于业务逻辑而非繁琐的手动映射过程。无论是简单的状态读取还是复杂的异步流程控制,都可以借助这些工具快速实现。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端深造中

老板别忘了支持哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值