IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue3获取响应式数据、监听数据变化、判断和转换(reactiveApi) -> 正文阅读

[JavaScript知识库]Vue3获取响应式数据、监听数据变化、判断和转换(reactiveApi)

获取响应式数据

API传入返回备注
reactiveplain-object对象代理深度代理对象中的所有成员
readonlyplain-object or proxy对象代理只能读取代理对象中的成员,不可修改
refany{ value: … }对value的访问是响应式的,如果传入的值是一个对象,则会通过reactive代理,如果已经是代理,则直接使用代理
computedfunction{ value: … }读取value值时,会根据情况决定是否要运行函数

应用

  • 如果想让一个对象变为响应式数据,使用reactive或者ref
  • 如果想让一个对象只读,使用readonly
  • 如果想让一个非对象数据变为响应式,使用ref
  • 如果想根据一个响应式数据得到另一个响应式数据,使用computed

注意点

const state = reactive({a:1}) // 数据源,不暴露
const imState = readonly(state) // 暴露出一个不可更改的对象
const setValue = (val) => {
	state.a = val // 设置
}
return {
	imState,
	setValue
}
  • 导出一个用户不可随意更改的对象,仅能通过作者提供的方法更改
  • cumputed传入的函数不会直接调用,当用到函数内部的响应式数据时,会在使用这个响应式数据之前调用,且具有缓存,当数据不变时函数不会重复执行
  • 使用…解构reactive或者readonly,或者使用 { a } = state这种格式得到的数据不具有响应式 解决办法:使用toRefs

监听数据变化

watchEffect

const watch = watchEffect(()=> {
	// 该函数会立即执行,记录响应式数据,当其变化时,会放入微队列执行
})
// 返回一个函数,调用这个函数会停止监听
watch(); // 停止监听

watch

// 监听单个数据的变化
const state = reactive({a: 1})
watch(
	()=> state.a,
	(newValue, oldValue)=> {
		// ... 微队列调用
	},
	options // 配置参数对象 如immediate
)
const count = ref(0)
watch(
	count,
	(newValue, oldValue)=> {
		// ...
	},
	options // 配置参数对象 如immediate
)
// 监听多个数据的变化
watch(
	[()=> state.a, count],
	([newValue1, newValue2], [oldValue1, oldValue2])=> {
		// ...
	},
	options
)

应用

除了以下场景,其余都建议使用watchEffect

  • 不希望回调函数一开始就执行
  • 数据改变时,需要参考旧值
  • 需要监控一些回调函数中不会用到的数据

判断

  • isProxy 是否由reactive或者readonly创建
  • isReactive 是否由reactive创建
  • isReadonly 是否是有readonly创建
  • isRef 是否是一个ref对象

转换

unref

等同于 isRef(val) ? val.value : val
使用: const a = unref(b)

toRef

得到一个响应式对象某个属性的ref格式

const state = reactive({a: 1})
const aRef = toRef(state, 'a')
aRef.value++
console.log(state.a) // 2
state.a++
console.log(aRef.value) // 3

toRefs

const state = reactive({a: 1, b: 2})
const stateRefs = toRefs(state)
/*
stateRefs: not a proxy
{
	a: {value: ...},
	b: {value: ...}
}
*/

应用

setup() {
	const state = reactive({a: 1, b: 2})
	return {
		...state // a,b不再是响应式
	}
}
setup() {
	const state = reactive({a: 1, b: 2})
	return {
		...toRefs(state) // a,b是响应式
	}
}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:34:53  更:2022-04-07 22:37:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:31:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码