在Vue 3的新Reactivity API中,Vue.delete的替代方案是什么?
Vue.delete
a2mppw5e1#
Vue.delete和Vue.set在Vue 3中不需要。通过使用代理的新React性系统,Vue能够检测到React性数据的所有更改。你可以使用JavaScript的delete操作符:
Vue.set
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>
的数据
4sup72z82#
对于数组,使用splice方法是正确的方法。
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"
undefined
v-for="number in numbers"
2条答案
按热度按时间a2mppw5e1#
Vue.delete
和Vue.set
在Vue 3中不需要。通过使用代理的新React性系统,Vue能够检测到React性数据的所有更改。你可以使用JavaScript的
delete
操作符:字符串
下面是一个使用vanilla JavaScript删除和添加对象属性的Vue 3演示:
的数据
4sup72z82#
对于数组,使用
splice
方法是正确的方法。字符串
虽然
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"