Vue 3 - Vue.删除备选项

hrirmatl  于 2023-08-07  发布在  Vue.js
关注(0)|答案(2)|浏览(210)

在Vue 3的新Reactivity API中,Vue.delete的替代方案是什么?

a2mppw5e

a2mppw5e1#

Vue.deleteVue.set在Vue 3中不需要。通过使用代理的新React性系统,Vue能够检测到React性数据的所有更改。
你可以使用JavaScript的delete操作符:

delete obj[key]

字符串
下面是一个使用vanilla JavaScript删除和添加对象属性的Vue 3演示:

const { createApp, reactive } = Vue;
const app = createApp({
  setup() {
    const obj = reactive({ a: 1, b: 2, c: 3 })
    return { obj }
  }
});
app.mount("#app");
<div id="app">
  Object: {{ obj }}
  <hr>
  <template v-for="(item, key) in obj">
    <button @click="delete obj[key]">Delete key {{ key }}</button>
  </template>
  <button @click="obj['z'] = 'Added'">Add key z</button>
</div>

<script src="https://unpkg.com/vue@next"></script>

的数据

4sup72z8

4sup72z82#

对于数组,使用splice方法是正确的方法。

const numbers = ['0', '1', '2', '3'];
numbers.splice(1,1); // Array ["0", "2", "3"]

字符串
虽然delete运算符也适用于数组,但使用它会创建一个长度不会更新的稀疏数组,并且先前在删除索引处的元素将是undefined。参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete?retiredLocale=de#deleting_array_elements
这可能会导致以后使用阵列时出现问题,例如:在vue模板中使用v-for="number in numbers"

相关问题