如何在 Vue 3 中执行 Vue.set()?

Posted

技术标签:

【中文标题】如何在 Vue 3 中执行 Vue.set()?【英文标题】:How do I do Vue.set() in Vue 3? 【发布时间】:2021-12-15 05:07:46 【问题描述】:

正如here 解释的那样,Vue 3 已经移动了一系列在全局 Vue 实例上可用的函数。它们现在被命名为导入。这让我觉得我应该能够做到import set from 'vue',但我做不到。它不在那里。 set() 在哪里?

【问题讨论】:

在 vue 3 中你应该不再需要 set 了。你在哪里发现仍然需要使用 set Vue.set 仅在兼容性版本中可用,因为 Vue3 中的新功能意味着您将不再遇到 Vue2 中的反应性问题:v3.vuejs.org/guide/migration/…。你能分享一下为什么需要 Vue.set 的 MCVE 吗? 是的。事实上,它是不需要的。我正在移植一些代码,所以四处寻找它。伟大的。我可以不用它。 【参考方案1】:

This article 将帮助您理解为什么我们首先需要 vue.set。简而言之,您需要它以便在不破坏响应性的情况下向数据对象添加新属性。

使用 Vue 3,您不再需要担心破坏反应性。文章说你不应该在 Vue 2 中做的事情,现在可以在 Vue 3 中做。

vue 2 上的示例:

data() 
  return 
    personObject: 
      name: 'John Doe'
    
  
,
methods: 
  addBio(bio) 
     this.$set(this.personObject, 'bio', bio)  // this was needed on vue 2

现在,在 Vue 3 上,您可以将 bio 属性直接添加到对象,并且该对象仍然是响应式的:

methods: 
  addBio(bio) 
     this.personObject['bio'] = bio)

【讨论】:

以上是关于如何在 Vue 3 中执行 Vue.set()?的主要内容,如果未能解决你的问题,请参考以下文章

vue $set

Vue监测数据改变的原理

vue数组和对象的响应式实现

vue数组对象修改触发视图更新

vue watch 不生效的解决方法

vue+this.$set+Vue.set的使用