vue.js - 如何使用 Vuex 向状态数组对象添加新值?
问题描述
我的代码是这样的:
<template>
...
...
</template>
<script>
export default {
...
methods: {
...mapActions([
'getDataDoctor',
'getDataSchedule'
]),
async visibilityChanged(isVisible, entry, item) {
let param = {
hospitalId: item.hospital_id,
doctorId: item.doctor_id
}
await this.getDataSchedule(param)
let data = this.dataDoctor
for (let key in data) {
this.$set(data[key].find(e => e.doctor_id === item.doctor_id && e.hospital_id === item.hospital_id), 'schedule', this.dataSchedule.schedule)
}
}
},
computed: {
...mapState({
dataDoctor: state => state.dataStore.dataDoctor,
dataSchedule: state => state.dataStore.dataSchedule
}),
},
}
</script>
如果我 console.log(this.dataDoctor),结果如下:
或者你可以看到 this.dataDoctor 这个:https ://pastebin.com/yGjsTBjX
this.dataDoctor 是来自 vuex 存储的状态。我想在那里增加新的价值。名字是时间表
我喜欢那样。但是存在这样的错误:
无法在未定义、null 或原始值上设置反应属性:未定义
Uncaught (in promise) TypeError: Cannot use 'in' operator to search 'schedule' in undefined
我怎么解决这个问题?
解决方案
这一点看起来不对:
for (let key in data) {
this.$set(data[key].find(e => e.doctor_id === item.doctor_id && e.hospital_id === item.hospital_id), 'schedule', this.dataSchedule.schedule)
}
从您发布的示例数据中,这只会找到(最多)一个值的东西key
。对于将返回的其他值,key
将失败。find
undefined
$set
尝试这个:
for (const key in data) {
const entry = data[key].find(e => e.doctor_id === item.doctor_id && e.hospital_id === item.hospital_id)
console.log(`key is ${key}:`, entry)
if (entry) {
this.$set(entry, 'schedule', this.dataSchedule.schedule)
}
}
当然,也有可能没有条目匹配。我包含的控制台日志记录也应该可以帮助您识别该场景。
mutation
我应该补充一点,通常认为在商店内而不是直接在组件内改变商店状态是最佳实践。
推荐阅读
- ios-simulator - Apple TV 模拟器 - Siri Remote 未出现
- javascript - 为什么这段代码返回未定义的值?
- html - 我的导航栏没有保持在顶部,它会一直滚动,如何让它保持在顶部
- flutter - Fluttter 在真机上运行和调试
- javascript - 为什么我的推送到数组函数返回为空?
- maximo - 获取已保存资产查询列表作为值的动态域?
- c++ - Sobel算法无库,灰度输出
- verilog - Implementing between sequential and combinational logic in HDL
- ios - 如何使用 API 模型数据数组显示 tableview 部分
- java - 为什么执行 Prepared Statement 时会出现 java.sql.SQLSyntaxErrorException?