Vue - toRaw 与 markRaw
一、toRaw
作用:
- 用于获取一个响应式对象的原始对象,toRaw 返回的对象不再是响应式的,不会触发视图更新。
使用场景:
- 在需要将响应式对象传递给非 Vue 的库或外部系统时,使用 toRaw 可以确保它们收到的是普通对象。
<template>
<div class="person">
<h3>姓名:{
{person.name}}</h3>
<h3>年龄:{
{person.age}}</h3>
<button @click="changeAge">修改年龄</button>
<hr>
<h3>姓名:{
{rawPerson.name}}</h3>
<h3>年龄:{
{rawPerson.age}}</h3>
<button @click="rawChangeAge">修改年龄</button>
</div>
</template>
<script setup lang='ts' >
import { reactive, toRaw } from 'vue';
// person 是响应式数据
const person = reactive({
name: 'Tom',
age:20,
})
// rawPerson 原始数据
const rawPerson = toRaw(person)
// 对比
console.log('响应式数据',person);
console.log('原始数据',rawPerson);
// 响应式数据 可修改
const changeAge = () => {
person.age += 1;
}
// 原始数据 不可修改
const rawChangeAge = () => {
console.log('rawPerson中的age',rawPerson.age);
rawPerson.age += 1;
}
</script>
<style scoped>
</style>
二、markRaw
作用:
markRaw
用于标记一个对象,使其在 Vue 的响应式系统中保持“原始状态”。这意味着被 markRaw
标记的对象在 Vue 的响应式逻辑中不会被代理,因此不会变为响应式对象。
即,标记一个对象,使其永远不会变成响应式的。
总结
API | 用途 | 适用场景 |
---|---|---|
toRaw | 获取响应式对象的原始对象 | 调试、访问响应式对象的实际值 |
markRaw | 将对象标记为原始,使其不变为响应式对象 | 对于大型对象或不需要响应式特性的第三方库实例 |
通过适当地使用 toRaw
和 markRaw
,可以在开发过程中有效地管理 Vue 的响应式性和性能。