Vuex中如何getters动态获取state的值

作者:Juice-Dreamer 时间:2024-05-28 15:54:23 

Vuex getters动态获取state的值

在做项目时,getters里有很多冗余代码,但是仔细一看可以根据参数来解决,于是决定使用传参来进行获取,减少代码冗余。

案例

需求:在getters里能够根据值动态获取到people的元素。经过多次尝试,最终得到下面的代码。 

state.js代码如下:

export default {
 people: [
   {
     name: 'zs',
     age: 14
   },
   {
     name: 'ss',
     age: 24
   },
   {
     name: 'gh',
     age: 34
   }
 ]
}

getters.js代码如下:

const getters = {
// 根据index获取state.person[index]
 getPerson: function (state) {
   // console.log(state)
   return function (index) {
     return state.people[index]
   }
 },
 // 获取state.person[0]
 getPerson1: function (state) {
   // console.log('getPerson1:', state.people[0])
   // console.log(typeof getters.getPerson) return function
   // console.log(getters.getPerson(state)(1))  注: state不传过去的话,getPerson()找不到state
   return getters.getPerson(state)(1) // 成功获取state.person[0]
 },
 getPerson2: function (state) {
   return getters.getPerson(state)(2) // 成功获取到state.person[1]
 }
}
export default getters

说明

因为项目中数据还要响应式,因此我使用setInterval方法来模拟是否会实时更新,事实证明可以,因此可以推荐用这种方法。

Vuex中如何getters动态获取state的值

Vuex中如何getters动态获取state的值

Vuex state值更改但是getters未更新

实现效果

选择一种交通工具则出现对应的席别列表。

Vuex中如何getters动态获取state的值

state:

seatList: {},//初始席别

最后state结果:

seatList: {
 '1':[{
 code:"101",
 name:'经济舱'
 },{
 code:"102",
 name:'公务舱'
 }],
 '2':[{
   code:"201",
   name:'商务座'
 },
 ...
 ]
},

getters:

seatListItem:(state)=>(key)=>{
   let list=state.common.seatList;
   return list[key]?list[key]:[]
 },

mutations:

SET_SEAT_LIST: (state,data) => {
     state.seatList = null;//问题出现在此处,对象要先置为null再赋值就可
     state.seatList= data;
   },

template:

<!-- 席别-->
         <el-select v-if="scope.row.vehicleCode&&seatListItem(scope.row.vehicleCode)" placeholder="" size="small"
                    class="selectWidth"
                    @change="handleChangeSeatType($event,scope.$index,receiptTableArr)"
                    v-model="scope.row.seatName"
                    :disabled="types == 'look'||!scope.row.vehicleCode"
                    v-bind:class="[types == 'look'?'numberStyleLocck':'','clearCursor']">
           <el-option
             v-for="(item,itenIndex) in seatListItem(scope.row.vehicleCode)"
             :label="item.value"
             :value="item"
             :key="itenIndex"
           ></el-option>
         </el-select>

computed:

computed: {
     ...mapState({
       vehicleList: state => state.vehicleList,//交通工具
       seatList: state => state.seatList,//席别
     }),
     ...mapGetters(['seatListItem'])
   },

methods:

getVehicleList(other){
     getVehicleSeatList({
       type:'JT',
       other
     }).then((res)=>{
       if(res.data.code==200){
         const data = res.data.data;
         let seatList= this.$store.state.seatList;
             if(!seatList[other]){
               seatList[other]=data
             }
             this.$store.commit('SET_SEAT_LIST', seatList, params.other);
       } else {
         this.$message.warning('获取交通工具席别失败');
         return false
       }
     })
   },

最后发现,在mutations中要先将state设置为空然后再赋值,否则不更新。

来源:https://blog.csdn.net/qq_39811414/article/details/109609670

标签:Vuex,getters,state
0
投稿

猜你喜欢

  • onmouseover事件和onmouseout事件全面理解

    2024-04-17 09:42:37
  • python 自动监控最新邮件并读取的操作

    2023-02-04 12:58:51
  • Vue3通过ref操作Dom元素及hooks的使用方法

    2024-04-27 16:07:32
  • Python drop方法删除列之inplace参数实例

    2023-07-23 23:26:49
  • pandas使用apply多列生成一列数据的实例

    2022-11-16 20:23:59
  • 使用python实现拉钩网上的FizzBuzzWhizz问题示例

    2021-06-18 08:41:38
  • 在Sublime Editor中配置Python环境的详细教程

    2023-08-14 08:33:26
  • python学习VSCode使用技巧带你进入高效开发模式

    2021-01-02 04:38:58
  • PHP中单引号和双引号的区别详解

    2023-05-25 08:16:51
  • Oracle函数使索引列失效的解决办法

    2024-01-15 16:52:08
  • javascript引导程序

    2024-04-16 10:31:16
  • ASP MSSQL存储过程的实现小例

    2011-04-06 11:02:00
  • MSSQL优化之探索MSSQL执行计划(转)

    2011-11-03 17:16:21
  • 在tensorflow中设置使用某一块GPU、多GPU、CPU的操作

    2023-07-22 11:37:28
  • 深入理解python中函数传递参数是值传递还是引用传递

    2022-02-21 10:08:33
  • Python中dataclass库实例详解

    2023-11-30 02:14:35
  • 探讨各种PHP字符串函数的总结分析

    2024-05-11 10:02:16
  • python提取word文件中的图片并上传阿里云OSS

    2021-02-01 10:52:25
  • JavaScript实现的反序列化json字符串操作示例

    2024-04-10 10:46:01
  • Mysql中TIMESTAMPDIFF函数的语法与练习案例

    2024-01-28 18:43:44
  • asp之家 网络编程 m.aspxhome.com