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