Vue 和 Vuex v-for 状态改变时不能正常更新

Vue and Vuex v-for not updating properly when state changes

这是我的存储和删除突变。

const store = new Vuex.Store({
  state: {
    todos: [
      {
        date: "22/03/1994",
        todos: [
          { icon: 0, text: "seyehate çıkılacak " },
          { icon: 0, text: "seyehate çıkılacak " },
        ]
      },
      .....
    ]
  },

  getters: {
    getTodos: state => {
      return state.todos
    }
  },

  mutations: {
     delete(state, { dateIndex, index }) {
      console.log("dateIndex", dateIndex)
      if (state.todos[dateIndex].todos.length == 1) {
        state.todos.splice(dateIndex, 1)
      } else {
        state.todos[dateIndex].todos.splice(index, 1)
      }
    }
  },
})

这是我的主要组成部分:

<ListDate
  v-for="(item, index) in list"
  :key="index"
  :todos="item"
  :dateIndex="index"
></ListDate>

我用吸气剂计算数据:

computed: {
  list() {
    return this.$store.getters.getTodos;
  },
},

在我的 ListDate 组件中:

<ListItem
  v-for="(item, index) in dateTodos"
  :key="index"
  :message="item.text"
  :icon="item.icon"
  :dateIndex="dateIndex"
  :index="index"
/>

在这个组件中,我提交了删除变更。它的工作但是当我与 dateIndex 拼接时它不能正常工作。我查看状态并看到它已更改但列表未按正确方式呈现。当我突然删除一些索引时,最后一个对象消失了,状态正常但视图看起来不正确。我如何正确呈现状态数据?

由于您的 v-for 使用 index 作为 key,当您删除一个项目时,下一个项目会滑入它的位置,并且 DOM 会被重复使用。

您需要在对象上创建真正唯一的 属性 以用作键,例如 id:

todos: [
  { id: 1, icon: 0, text: "seyehate çıkılacak " },
  { id: 2, icon: 0, text: "seyehate çıkılacak " },
]

并使用 属性 作为 key:

<ListItem
  v-for="(item, index) in dateTodos"
  :key="item.id"
  :message="item.text"
  :icon="item.icon"
  :dateIndex="dateIndex"
  :index="index"
/>