我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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 state值更改但是getters未更新

实现效果

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

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设置为空然后再赋值,否则不更新。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

react如何获取state的值并更新使用

这篇文章主要介绍了react如何获取state的值并更新使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

ResultSet如何动态获取列名和值

这篇文章主要介绍了ResultSet如何动态获取列名和值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-21

java中如何获取url中的值

在Java中,可以使用java.net.URL类来获取URL中的值。以下是一个简单的示例代码:import java.net.URL;import java.net.MalformedURLException;public class
java中如何获取url中的值
2024-04-09

qt如何获取QString中的数值

要获取 QString 中的数值,可以使用 QString 的 toInt()、toDouble()、toFloat() 等成员函数来将 QString 转换为相应的数值类型。示例代码如下:```cppQString str = "123"
2023-08-12

java中如何获取map的key值

在Java中,可以使用`Map`的`keySet()`方法获取`Map`的所有key值。`keySet()`方法返回一个`Set`集合,该集合包含`Map`中的所有key值。下面是一个示例代码:```javaimport java.util
2023-08-31

python如何获取json中的某个值

在Python中,可以使用`json`模块来解析JSON字符串。可以通过将JSON字符串转换为字典或列表的形式,然后使用索引或键名来获取JSON中的特定值。以下是一个示例代码,展示了如何获取JSON中的某个值:```pythonimport
2023-09-04

python如何获取list中最大的值

您可以使用内置的 `max()` 函数来获取一个列表中的最大值。以下是一个示例:```pythonmy_list = [1, 2, 3, 4, 5]max_value = max(my_list)print(max_value) # 输出
2023-08-18

java如何获取list中最大的值

可以使用Collections类的max()方法来获取List中的最大值。以下是一个示例代码:```javaimport java.util.ArrayList;import java.util.Collections;import jav
2023-08-15

java如何获取json中的某个值

在Java中,可以使用JSON库来解析JSON数据并获取其中的某个值。常用的JSON库有Jackson、Gson和JSON-java等。以下是使用Jackson库获取JSON中的某个值的示例代码:```javaimport com.fast
2023-10-10

java如何获取object中某key的值

在Java中,可以通过以下方式获取object中某个key的值:使用JSONObject类:首先将object转换为JSONObject对象,然后使用get方法获取指定key的值。import org.json.JSONObject;JS
2023-10-24

java如何获取url中的参数值

在Java中获取URL中的参数值可以使用`java.net.URLDecoder`类的`decode`方法来解码URL中的参数。具体步骤如下:1. 使用`java.net.URL`类的构造函数创建一个URL对象,传入URL字符串作为参数。2
2023-08-08

编程热搜

目录