当前位置: 首页 > news >正文

vue3的 computed 计算属性 与 watch监听

看下

vue2 的 计算属性 computed

(有this ,但是 vue3 是没有的,我们说过vue3的this是undefined)

vue3的computed 函数

与vue2 中的computed 配置功能一致。
(注意的是简写会在修改的时候警告,所以我们按照完整写法写入。)

写法:
引入 computed

import {computed} from 'vue'
setup(){
	完整写入方法 
		let fullName = computed({
				get(){ //读取
						return preson.firstName +  '-'  + preson.lastName
					},
				set(value){ // 修改
				 	const nameArr = value.split(‘-’) 
				 	preson.firstName = nameArr[0]
				 	preson.lastName = nameArr[1]
				}
		})
	return {
		fullName 
	}
}

在这里插入图片描述

先看下

vue2 中的监听 watch

在这里插入图片描述

在这里插入图片描述
vue2 中深度监听和立即监听
在这里插入图片描述

vue3 的watch 函数 监听(可以接收三个参数)

不过有两个坑要注意:
1:监听reactive定义的响应式数据时:oldvalue无法正确获取。强制开启了深度监听(deep配置失效)。
2:监听reactive定义响应式数据中某个属性时,deep配置有效。

代码展示

import {ref, reactive, watch} from 'vue'
setup(){
	let sum = ref(0) // 一个
	let msg = ref(‘你好啊’)// 多个
	let preson = reactive({
		name: '张三',
		age: 18,
		job:{
			j1:{
					xinzi:20
				},
			j2:{
			        xinzi: 20
				}
		}
	})
	
	情况一: 监听ref所定义的一个响应式数据
	watch(sum,(newValue, oldValue)=>{
		console.log('sum变化', newValue, oldValue)
	},{immediate:true})
	
	情况二:监听多个ref所定义的响应式数据
	watch([sum,msg],(newValue,oldValue)=>{
		console.log('sum/msg变化', newValue, oldValue) // 打印下看看吧
	},{immediate:true})
	
	情况三:监听reactive  所定义的响应式数据(对象):
		注意:1此处无法正确的获取oldvalue.
		注意:2 强制开启了深度监听且deep配置无效
	watch(person,(newValue,oldValue)=>{
		console.log('person变化了', newValue, oldValue) // 有坑一,且目前无法解决,看官网后期怎优化
	},{immdiate:true, deep:false}) // 这里的 deep配置无效
	
	情况四: 监听reactive  所定义的响应式数据(对象)中的某个属性。
	注意要写成一个函数形式,不能直接取监听对象属性 
	watch(()=>person.age,(newValue,oldValue)=>{
		console.log('person变化了', newValue, oldValue) // 有坑一,且目前无法解决,看官网后期怎优化
	},{ immdiate: true, deep:  true})
	
	情况五:监听reactive  所定义的响应式数据(对象)中的某写属性
	watch([()=> person.name, ()=>person.age], (newValue,oldValue)=>{
		console.log('person的name ,age 变化了', newValue, oldValue) // 有坑一,且目前无法解决,看官网后期怎优化
	},{ immdiate: true, deep:  true})
	
	特殊情况:监听对象中的对象...(监听深度对象)
	watch(()=>person.job,(newValue,oldValue)=>{
		console.log('person的job变化了', newValue, oldValue) // 有坑一,且目前无法解决,看官网后期怎优化
	},{ immdiate: true, deep:  true})// 此处由于监听的是reactive 所定义的对象中的某个属性,所以deep配置有效。
		
	return {
		sum,  msg,// 基础的数据
		preson  // 对象
	}
}

情况二
在这里插入图片描述
情况三
在这里插入图片描述
情况四
在这里插入图片描述
情况五
在这里插入图片描述
总结
在这里插入图片描述

相关文章:

  • Diomidis Spinellis:有效的调试
  • ListView的简单使用
  • vue3技术 watch时 value问题
  • 最大流学习笔记(1)
  • vue3 watchEffect 函数
  • Apaceh 多虚拟主机多站点配置两种方案
  • ubutnu安装geany
  • vue3生命周期钩子函数
  • 每天一个linux命令(11):nl命令
  • ABP文档 - 本地化
  • react-native 安卓真机环境搭建
  • vue3 自定义hook函数 和 toRef
  • git add . 的时候遇到warning: LF will be replaced by CRLF in ...... 解决办法
  • vue3 祖孙组件通讯传值 provide 与 inject 以及 响应式数据的判断
  • Unity3D 学习——入门资料整理
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [case10]使用RSQL实现端到端的动态查询
  • AWS实战 - 利用IAM对S3做访问控制
  • Electron入门介绍
  • happypack两次报错的问题
  • PAT A1050
  • PhantomJS 安装
  • rc-form之最单纯情况
  • TypeScript迭代器
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • uva 10370 Above Average
  • 从输入URL到页面加载发生了什么
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 深入浅出Node.js
  • 使用SAX解析XML
  • 我与Jetbrains的这些年
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 优化 Vue 项目编译文件大小
  • Semaphore
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​马来语翻译中文去哪比较好?
  • # 数论-逆元
  • #if 1...#endif
  • (09)Hive——CTE 公共表达式
  • (39)STM32——FLASH闪存
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (规划)24届春招和25届暑假实习路线准备规划
  • (过滤器)Filter和(监听器)listener
  • (接口封装)
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net framework profiles /.net framework 配置
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证