组件中的data为什么要定义成一个函数, 返回值是一个对象?动态给vue的data添加一个新的属性时会发生什么?怎样解决?

本文主要是介绍组件中的data为什么要定义成一个函数, 返回值是一个对象?动态给vue的data添加一个新的属性时会发生什么?怎样解决?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

组件中的data为什么要定义成一个函数,返回值是一个对象:

对象为引用类型,当复用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时其他重用的组件中的data会同时被修改,而使用返回对象的函数,由于每次返回的都是一个新对象(Object的实例),引用地址不同,则不会出现这个问题。

动态给vue的data添加一个新的属性时会发生什么:

数据虽然更新了,但是页面没有更新,原因是Vue2是通过object.defineproperty实现数据响应式的当我们访问定义的属性或者修改属性值的时候都能够触发setter 与 getter,但是我们为 obj 添加新属性的时候却无法触发事件属性的拦截,原因是一开始 obj 的定义属性被设成了响应式数据,而新增的属性并没有通过 obj.defineproperty 设置成响应式数据。

解决方案:

1.vue.set():通过vue.set 向响应式对象中添加一个 property ,并确保这个新 property 同样是响应式的,且触发视图更新

2.Obj.assign() :直接使用 obj.assign()添加到对象的新属性不会触发更新,应该要创建一个新的对象,合并原对象和混入对象的属性

3.$forceUpdate :可以对Vue进行一次强制更新,$forceUpdate 可以使vue实例重新渲染(仅仅影响实例本身和插入插槽内容的子组件而不是所有子组件)

 总结:

1.如果为对象添加少量的新属性,可以直接采用vue.set()

2.如果需要为新对象添加大量的新属性,则通过 obj.assign()创建新对象

3.如果实在不知道该怎么操作的时候可以使用 $forceUpdate() 进行强制刷新(不建议)

这篇关于组件中的data为什么要定义成一个函数, 返回值是一个对象?动态给vue的data添加一个新的属性时会发生什么?怎样解决?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015452

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

MyBatis-Plus使用动态表名分表查询的实现

《MyBatis-Plus使用动态表名分表查询的实现》本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录1. 引入依赖2. myBATis-plus配置3. TenantContext 类:租户上下文

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

JavaWeb 中的 Filter组件详解

《JavaWeb中的Filter组件详解》本文详细介绍了JavaWeb中的Filter组件,包括其基本概念、工作原理、核心接口和类、配置方式以及常见应用示例,Filter可以实现请求预处理、响应后... 目录JavaWeb 中的 Filter 详解1. Filter 基本概念1.1 什么是 Filter1.

pandas使用apply函数给表格同时添加多列

《pandas使用apply函数给表格同时添加多列》本文介绍了利用Pandas的apply函数在DataFrame中同时添加多列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、Pandas使用apply函数给表格同时添加多列二、应用示例一、Pandas使用apply函

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在