Material-UI的Chip删除后列表没更新怎么办?

春萍 Dev 阅读 13

我在用Vue+Material-UI做标签列表时遇到问题,Chip的onDelete事件触发后,虽然图标消失了但数据没同步更新。

场景是这样的:v-for循环渲染Chip列表,每个Chip绑定了onDelete事件。我尝试手动调用emit更新父组件数据,但删除后页面还是显示原列表。代码是这样的:


<template>
  <div>
    <MUIChip
      v-for="(tag, index) in tags"
      :key="index"
      :label="tag"
      deletable
      @delete="handleDelete(index)"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      tags: ['标签1', '标签2']
    }
  },
  methods: {
    handleDelete(index) {
      this.tags.splice(index, 1) // 这里执行了删除操作
    }
  }
}
</script>

控制台没报错,但实际删除后页面还是显示原来的两个标签。用Vue DevTools看数据确实更新了,但界面不刷新,这是怎么回事?是不是事件绑定哪里漏了?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
萌新.西西
问题出在 :key 上,你用的是 index,这玩意儿在列表更新时会乱套。改成唯一值比如标签本身就好使了。懒人方案直接改 :key="tag",代码如下:

<template>
<div>
<MUIChip
v-for="(tag, index) in tags"
:key="tag"
:label="tag"
deletable
@delete="handleDelete(index)"
/>
</div>
</template>

<script>
export default {
data() {
return {
tags: ['标签1', '标签2']
}
},
methods: {
handleDelete(index) {
this.tags.splice(index, 1)
}
}
}
</script>


如果标签可能重复,那就给每个标签加个唯一ID,用ID当 :key。别嫌麻烦,这一步省不了。
点赞
2026-02-18 10:39