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>
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端深造中

老板别忘了支持哦

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

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

打赏作者

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

抵扣说明:

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

余额充值