javascript - 改变状态后由 Vue(x) 更改的数组
问题描述
我正在构建一个用于学习目的的 Vue 应用程序,我目前正坚持使用来自 API 的数据更新我所在州的数组。这是我的 API:
{
"stations": [
{
"id": 1,
"name": "Station 1",
},
{
"id": 2,
"name": "Station 2",
}
]
}
这是我的 Vuex 商店中的操作(ApiService 只返回 axios 响应):
actions: {
fetchStations({ commit }) {
let promise = ApiService.getStations()
promise.then(res => {
console.log(res.data)
commit('SET_STATIONS', res.data)
})
},
这是突变:
mutations: {
SET_STATIONS(state, stations) {
state.stations = stations
},
当我在 devtools 中检查记录的 res.data 时,我得到了这个
正如您所见,两个对象的 id 都是“2”,即使在 DB 中它们是不同的。
有趣的是,当我在我的操作中注释掉提交行时,如下所示:
actions: {
fetchStations({ commit }) {
let promise = ApiService.getStations()
promise.then(res => {
console.log(res.data)
// commit('SET_STATIONS', res.data)
})
},
问题消失了, res.data 完全不同
谁能向我解释为什么会这样以及我该如何解决?
谢谢!
解决方案
因为stations
数据在某处使用。我认为您正在使用类似v-for"item in stations" :key="item.id"
. 当你commit('SET_STATIONS', res.data)
,它变了stations
。它有重复id
的。
推荐阅读
- matlab - 如何从信号的频谱中计算信号的 SNR?
- javascript - BMR计算器程序
- angular - “AngularFireObject”类型上不存在属性“take”
'.ts - c# - C# 将 XML 反序列化为模型类错误 -
没有预期 - unity3d - XR 设备 (Oculus) 在 Unity 的新输入系统中启动未配对
- javascript - Webpacker 找不到 application.js
- javascript - 从按钮列表中创建 Javascript 中的随机按钮
- java - 如何使用 SpringBoot + JPA 在 POSTGRES 中存储 JSON?
- java - 数据没有从 Firebase 读入我的 ArrayList
- python-3.x - 我必须在一行中每 3 个元素之后打印一个带有空格的网格,每三行之后打印一个空行,但我无法弄清楚代码