Javascript 变异状态后Vue(x)更改的数组

Javascript 变异状态后Vue(x)更改的数组,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,我正在构建一个用于学习的Vue应用程序,目前我一直在用API中的数据更新我所在州的阵列。这是我的API: { "stations": [ { "id": 1, "name": "Station 1", }, { "id": 2, "name": "Station 2", } ] } 这是我的Vuex存储中的操作(ApiService只返回axios响应): 这就是突变: mutations: { SET

我正在构建一个用于学习的Vue应用程序,目前我一直在用API中的数据更新我所在州的阵列。这是我的API:

{
  "stations": [
    {
      "id": 1,
      "name": "Station 1",
    },
    {
      "id": 2,
      "name": "Station 2",
    }
  ]
}
这是我的Vuex存储中的操作(ApiService只返回axios响应):

这就是突变:

mutations: {
  SET_STATIONS(state, stations) {
    state.stations = stations
  },
当我检查devtools中记录的res.data时,我得到了
正如您所看到的,这两个对象的id都是“2”,即使在DB中它们是不同的

有趣的是,当我在我的操作中注释掉commit行时,如下所示:

actions: {
  fetchStations({ commit }) {
    let promise = ApiService.getStations()
    promise.then(res => {
      console.log(res.data)
      // commit('SET_STATIONS', res.data)
    })
},
问题消失了,res.data也完全消失了

有人能向我解释一下为什么会出现这种情况,以及我如何解决它吗


谢谢大家!

因为
站点
数据正在某处使用。我认为您正在使用类似于
v的东西来表示“站点中的项目”:key=“item.id”
。当您提交('SET_STATIONS',res.data)时,它会更改
站点。并且它有重复的
id

您能分享您的代码吗?记住console.log打印实时对象。我猜您正在从代码的不同部分更改站点(这取决于您的变体设置了什么),尝试调用commit('set_STATION',)直接使用模拟数据,不使用模拟数据,并查看发生了什么。Vue dev tools扩展还应帮助您查看存储区中的数据在某一时间发生了更改。我创建了一个github repo,其中包含完整的代码:对我来说,一切都很好,可能是在后端。
actions: {
  fetchStations({ commit }) {
    let promise = ApiService.getStations()
    promise.then(res => {
      console.log(res.data)
      // commit('SET_STATIONS', res.data)
    })
},