组件中的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

相关文章

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码