vue3笔记5 响应式API

浅响应式

shallowReactive 只创建第一层数据的响应式
适用于对象结构深,但只需处理最外层属性变化的场景

shallowRef 不处理对象类型的响应式,传对象时不会自动调用reactive
适用于逻辑中不修改对象属性,而替换整个对象的场景

只读

readonly 把响应式数据(ref/reactive)包装为只读的响应式数据
shallowReadonly 浅只读
适用于不希望数据被修改的场景,例如传递响应式数据时,不希望其他组件修改数据

将响应式对象转换为普通对象

toRaw 将reactive对象转换为普通对象
适用于读取响应式对象的数据进行操作,而不希望引起页面更新
markRaw 将普通对象标记为原始数据,防止被转换为响应式数据
适用于防止第三方类库被设置为响应式,或提高渲染不可变的大数据列表性能debounce

自定义ref

可以自行控制建立依赖跟踪触发更新通知
例如以下防抖函数实现,更新ref值后延迟一定时间才真正更新引用的值,并触发界面更新

<template>
	<input v-model="text" />
</template>
<script>
setup() {
	function useDebouncedRef(value, delay = 200) {
	  let timeout
	  return customRef((track, trigger) => {
	    return {
	      // 从自定义ref中取数了,调用track()触发依赖跟踪,并把value返回
	      get() {
	        // 取数时,通知取数方跟踪此数据变化,建立依赖关系
	        // 不写这个,取数方无法将此ref关联为依赖对象,不会在value更新时重新读取数据处理	        
	        track() 
	        return value
	      },
	      // 向自定义ref设置值,更新value值,并调用更新提醒触发器trigger
	      set(newValue) {
	        clearTimeout(timeout)
	        timeout = setTimeout(() => {
	          value = newValue
	          trigger() // 通知重新解析模板更新界面
	        }, delay)
	      }
	    }
	  })
	}
	return {
		text: useDebouncedRef('hello')
	}
}
</script>

判断响应式数据

isRef
isReactive
isReadonly
isProxy 检查对象是否是由reactive或readonly创建的Proxy对象

posted on   路过君  阅读(15)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2020-04-11 spring 启动时自动运行
2020-04-11 spring cloud oauth2授权服务 默认tokenService配置源码
2020-04-11 spring cloud 搭建oauth2授权服务 使用redis存储令牌
2020-04-11 spring cloud oauth2授权服务 clientDetails配置源码
2020-04-11 spring 验证框架
2020-04-11 IDEA 插件整理
2020-04-11 spring security笔记 默认登陆页面源码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示