前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue3 toRaw与markRaw

vue3 toRaw与markRaw

原创
作者头像
堕落飞鸟
发布2023-05-22 08:59:11
3430
发布2023-05-22 08:59:11
举报
文章被收录于专栏:飞鸟的专栏

toRaw函数

toRaw函数用于返回一个响应式对象的原始非响应式版本。当你想要直接访问对象的原始属性而不触发依赖追踪时,这个函数非常有用。

用法示例

下面是一个使用toRaw函数的示例:

代码语言:javascript
复制
import { reactive, toRaw } from 'vue';

const data = reactive({
  name: 'John',
  age: 30
});

const rawData = toRaw(data);

console.log(rawData.name); // 输出: John
rawData.name = 'Jane'; // 直接修改原始对象的属性

console.log(data.name); // 输出: Jane

在上面的示例中,我们首先使用reactive函数将data对象转换为响应式对象。然后,我们使用toRaw函数获取data对象的原始版本,并将其存储在rawData变量中。我们可以直接访问rawData的属性,并直接修改它们,而不会触发Vue的响应式系统。这对于需要绕过响应式追踪并直接操作对象的场景非常有用。

注意事项

需要注意的是,使用toRaw函数获取的原始对象不是响应式的。这意味着当你直接修改原始对象时,Vue的响应式系统不会被通知到,因此相关的视图也不会更新。只有当你重新将原始对象转换为响应式对象时,才会重新建立响应式追踪。

markRaw函数

markRaw函数用于标记一个对象,使其在被转换为响应式对象时保持非响应式。这对于需要避免特定对象被自动转换为响应式对象的情况非常有用。

用法示例

下面是一个使用markRaw函数的示例:

代码语言:javascript
复制
import { reactive, markRaw } from 'vue';

const data = {
  name: 'John',
  age: 30
};

const reactiveData = reactive(data);
const nonReactiveData = markRaw(data);

console.log(reactiveData.name); // 输出: John
console.log(nonReactiveData.name); // 输出: John

reactiveData.name = 'Jane';
console.log(reactiveData.name); // 输出: Jane

nonReactiveData.name = 'Alice';
console.log(nonReactiveData.name); // 输出: Alice

在上面的示例中,我们首先创建一个普通的对象data。然后,我们使用reactive函数将data对象转换为响应式对象,并将其存储在reactiveData变量中。接下来,我们使用markRaw函数标记data对象,以防止它被转换为响应式对象,并将其存储在nonReactiveData变量中。我们可以看到,reactiveData的属性是响应式的,而nonReactiveData的属性是非响应式的,对其进行的修改也不会触发响应式追踪。

注意事项

需要注意的是,使用markRaw函数标记的对象将始终保持非响应式,即使在之后将其传递给reactive函数进行转换。这对于一些特定的对象,如第三方库提供的对象或一些不需要响应式追踪的对象,非常有用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • toRaw函数
    • 用法示例
      • 注意事项
      • markRaw函数
        • 用法示例
          • 注意事项
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档