Web前端开发之VUE17——Vuex

本文详细介绍了Vuex在Vue.js应用中的作用,它作为一个状态管理库,用于统一管理多个组件之间的共享状态。文章通过实例展示了如何初始化Vuex,定义和映射state,以及使用getter方法。此外,还提到了Vue3中的变化,并讨论了mutation的同步性质和action的异步特性。最后,介绍了Vuex的模块化以及命名空间的使用,帮助开发者更好地组织和管理大型Vue项目的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Vuex是什么:

初始化功能:

定义state:

映射state方法:


Vuex是什么:

为了便于我们对多个组件复杂多样的数据分享和处理进行统一控制,vue推出vuex作为多组件统一控制的工具。

初始化功能:

定义state:

 

 

映射state:

 

vue3中的一些改变

 

getter方法:

通过上面的方法我们需要写自定义的computed方法,但是vuex帮我们继承了一个getter方法以便内含computed方法。

首先getter方法类似于计算属性,很多情况下就是一种内置的计算属性。

首先我们要在store容器中,定义我们的getter。

 

 示例代码:

//app.vue
<template>
  <button @click="$store.commit('changeCount')">click+1</button>
  <button @click="$store.state.count--">click-1</button>
  原始值:{{count}}
  getter计算值:{{getCountPlus}}
  mapgetter获取选中数组:{{getSelectedTableBar[0]}}
  获取id为1的数组项目:{{$store.getters.getTableBarById(3)}}
</template>

<script>
import {mapState,mapGetters} from 'vuex'
export default {
  computed:{
    ...mapState(['count']),
    ...mapGetters(['getCountPlus','getSelectedTableBar','getTableBarById'])
  }
}
</script>
//store容器
const store = createStore({
  state: {
    //存储状态
    count: 12,
    tableBar:[
      {id:1,text:'...',isSelected:true},
      {id:2,text:'...',isSelected:false},
      {id:3,text:'...',isSelected:true},
      {id:4,text:'...',isSelected:false},
    ]
  },
  getters:{
    getCountPlus(state){
      return state.count+2
    },
    getSelectedTableBar:(state)=>{
      return state.tableBar.filter(e=>e.isSelected===true)
    },
    getTableBarById:(state)=>(id)=>{
      return state.tableBar.find(e=>e.id===id)
    }
  },
  mutations: {
    changeCount(state) {
      state.count++
    }
  },
})

 Mutation:

payload载荷(给mutation传参) :

 

 

 常量代替mutation方法名:

 此方法一般用于多人项目合作。

mutation函数同步性:

 实质上任何在回调函数中进行的状态的改变都是不可追踪的。

Aciton:

action的使用icon-default.png?t=M3K6https://vuex.vuejs.org/zh/guide/actions.html

dispatch分发:

因为action方法的异步性及mutation方法的同步性,所以我们使用dispatch方法来调用异步元action方法。

 同样的action和mutation也有自己的map方法:

 mutation类似,详见官方文档。

module模块化:

 

 

module的命名空间:

 

 加上namespace:true后,getter和mutation和action不再是全局挂载,而是模块内私有。

封闭后可以使用下面的调用方法调用:

 第三种方法:

createNamespacedHelpers方法:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

言行物恒

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值