深入理解vue中的$set

下面是关于“深入理解Vue中的$set”的完整攻略。

什么是$set

在 Vue.js 中,我们经常需要在已有的数据对象中添加新的属性,但是这样做是响应式的吗?答案是否定的。因为 Vue.js 在初始化实例时将属性转化为 getter/setter,所以属性必须在初始化时存在才能让 Vue.js 转化它为响应式的数据。但是,Vue提供了一种方法来帮助我们完成动态添加响应式数据的操作,那就是Vue.set$set 方法。

在代码中加入 Vue.set 或者 this.$set,可以通过 Vue.set 或者 this.$set 来将一个对象的属性设为响应式属性,这样当新属性被添加时,Vue会通知所有的依赖它的组件进行渲染更新。

什么时候使用$set

当我们想要改变原有数组或对象的某个属性时,Vue.js 无法监听到这种变化。这时候,我们一般有以下两种方式:

  1. 直接使用数组的变异方法,例如 push,splice 等,对象直接使用属性值的变化。
  2. 通过set方法更新

方式一虽然会改变原有变量的值,但是 Vue.js 无法更新它的 DOM,也就是说,如果想要更新页面中的数据,我们需要使用$set。

方式二是当我们想要更新一个对象的属性,而又不想全量覆盖对象时。下面我们通过两个示例来具体了解这个方法。

示例1

(1)我们先创建一个包含数组的对象:

var data = { arr: [1, 2, 3] };

(2)现在我们想要向这个数组中添加一个元素。此时我们可以使用push

data.arr.push(4);

但是这样做是不会响应式的。也就是说,虽然我们更新了数据,但是页面中并不会更新:

<div id="app">
  <ul>
    <li v-for="item in arr" :key="item">{{ item }}</li>
  </ul>
</div>

但是,我们可以使用this.$set方法来完成响应式更新:

this.$set(data.arr, 3, 4);

这样就可以实现响应式更新了。

示例2

(1)我们先创建包含一个对象的数组:

var data = { arr: [{ name: "Tom", age: 18 }] };

(2)我们现在需要修改这个对象中的某个属性,比如说,将其age改为20。使用直接赋值的方式修改时,虽然对象中的属性已经被修改,但是页面并没有更新:

data.arr[0].age = 20;

(3)如果我们使用 Vue.set 或 this.$set 方法来修改数据对象中的属性,则可以实现响应式更新:

this.$set(data.arr[0], "age", 20);

这样就可以实现响应式更新了。

总结

  • 使用 Vue.js 时,尽量避免在对象上直接新添加属性。
  • 在添加新的属性时,应使用 Vue.set 或 this.$set 方法。
  • 使用 Vue.set 或 this.$set 方法,可以实现全局响应式更新,而普通的赋值则不能做到。
  • 对于修改数组元素、直接修改对象属性值的操作,Vue.js 无法捕获到,不会触发数据更新视图,可以使用 Vue.set 或 this.$set 方法来实现响应式更新。

希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解vue中的$set - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • vue.js与后台数据交互的实例讲解

    Vue.js与后台数据交互的实例讲解 在Web应用程序中,前端与后端之间的数据交互非常重要。Vue.js是一款流行的JavaScript框架,可为Web应用程序提供交互式用户界面。Vue.js还具有框架级别的支持,可以方便地与后端进行数据交互,这使得Vue.js成为开发Web应用程序的流行选择。 本文将向您介绍如何使用Vue.js与后台进行数据交互。我们将会…

    Vue 2023年5月28日
    00
  • Vue 中批量下载文件并打包的示例代码

    要实现Vue中批量下载文件并打包,可以使用webpack和file-saver库。 安装file-saver库 首先需要安装file-saver库,可以使用npm进行安装,命令如下: npm install file-saver –save 创建download.js 创建一个download.js文件,包含一个方法downloadSingle(url, …

    Vue 2023年5月28日
    00
  • Vue3全局组件通信之provide / inject详解

    当我们开发Vue3应用时,有时候会需要在多个组件之间进行数据传递,这时候就需要用到全局组件通信。Vue3中提供了两种方式进行全局组件通信,一种是provide / inject,另一种是Vuex状态管理,本文主要介绍前者。 一、provide / inject说明 provide / inject是Vue3中提供的API,用于在父组件中提供数据,然后在子组件…

    Vue 2023年5月27日
    00
  • vue-quill-editor+plupload富文本编辑器实例详解

    Vue-Quill-Editor + Plupload 富文本编辑器实例攻略 1. 简介 在 Web 开发过程中,富文本编辑器是一个重要的工具,它可以让用户通过类似于微信公众号编辑器的方式撰写富文本内容,从而满足更多细节定制和更丰富的表现力需求。 Vue-Quill-Editor 是一款基于 Vue.js 的 Quill 富文本编辑器组件库,而 Pluplo…

    Vue 2023年5月28日
    00
  • JS操作对象数组实现增删改查实例代码

    下面是JS操作对象数组实现增删改查实例代码的完整攻略。 1. 创建对象数组 首先,我们需要创建一个对象数组,用来存放数据。对象数组是一组相关联的拥有共同属性和方法的对象,可以进行统一管理。 let students = [ { name: "张三", age: 18, gender: "男" }, { name: &q…

    Vue 2023年5月27日
    00
  • VueX安装及使用基础教程

    VueX是Vue.js的状态管理库,它可以帮助我们在应用程序中管理共享状态。下面是VueX安装及使用基础教程的完整攻略。 安装 # 使用npm安装 npm install vuex –save # 使用yarn安装 yarn add vuex 使用 首先,在Vue.js中使用VueX,我们需要将其添加到我们的Vue.js应用程序中。可以使用以下代码在Vue…

    Vue 2023年5月27日
    00
  • Vue项目的网络请求代理到封装步骤详解

    下面我将为您讲解“Vue项目的网络请求代理到封装步骤详解”的完整攻略。 一、配置跨域请求代理 在 Vue 项目中,我们要请求后端资源,遇到运行时跨域问题,通常有以下几种解决方案: 1. 使用 JSONP JSONP 通过 script 标签的 src 属性请求服务器获取数据,由于 script 标签的 src 属性不受同源策略限制,所以可以跨域请求。但是 J…

    Vue 2023年5月27日
    00
  • Vue中使用this.$set()如何新增数据,更新视图

    Vue.js是一个流行的JavaScript框架,通过MVVM模式实现数据的双向绑定和DOM的自动更新。在Vue中使用this.$set()方法可以新增数据并且更新视图。 this.$set()的用法 Vue.js中,使用this.$set()方法,可以动态添加一个属性,触发视图的重新渲染。 this.$set(obj, key, value)方法接受3个参…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部