当前位置: 代码网 > it编程>前端脚本>Vue.js > vue3中markRaw示例详解

vue3中markRaw示例详解

2024年05月15日 Vue.js 我要评论
在 vue 3 中,markraw 是一个用于告诉 vue 的响应性系统不要对某个对象进行转换或追踪其响应性的函数。当你有一个对象,并且你确定你不需要它成为响应性对象时,你可以使用 markraw 来

在 vue 3 中,markraw 是一个用于告诉 vue 的响应性系统不要对某个对象进行转换或追踪其响应性的函数。当你有一个对象,并且你确定你不需要它成为响应性对象时,你可以使用 markraw 来标记它。这在一些场景中非常有用,比如当你需要集成一个第三方库或插件,并且这个库或插件的某些部分不需要是响应性的。

下面是一个详细的示例,展示了如何在 vue 3 中使用 markraw

import { reactive, markraw, torefs } from 'vue';
// 创建一个普通的 javascript 对象
const rawobject = {
  name: 'raw object',
  value: 'this is a raw object and it will not be reactive.'
};
// 使用 markraw 标记这个对象,使其保持原样
const markedrawobject = markraw(rawobject);
// 创建一个响应性对象
const state = reactive({
  // 将标记过的 rawobject 放入响应性对象中
  markedrawobject,
  // 另一个普通的对象,它会被转换为响应性对象
  reactiveobject: {
    name: 'reactive object',
    value: 'this is a reactive object and it will track changes.'
  }
});
// 在组件中使用这些对象
export default {
  setup() {
    // 使用 torefs 来解构响应性对象的属性,以便在模板中直接使用
    const { markedrawobject, reactiveobject } = torefs(state);
    // 由于 markedrawobject 是被 markraw 标记过的,修改它不会触发 vue 的响应性系统
    markedrawobject.value.name = 'modified raw object'; // 这不会触发更新
    // 修改 reactiveobject 则会触发 vue 的响应性更新
    reactiveobject.value.name = 'modified reactive object'; // 这会触发更新
    // 返回这些属性,以便在模板中使用
    return {
      markedrawobject,
      reactiveobject
    };
  }
};

在上面的代码中,我们创建了一个普通的 javascript 对象 rawobject,并使用 markraw 函数将其标记为原样对象。然后,我们将这个标记过的对象放入一个响应性对象 state 中。在组件的 setup 函数中,我们解构出 markedrawobjectreactiveobject,并尝试修改它们的属性。由于 markedrawobject 是被 markraw 标记过的,所以修改它的属性不会触发 vue 的响应性系统。而修改 reactiveobject 的属性则会触发响应性更新。

在模板中,你可以像这样使用这些属性:

<template>
  <div>
    <p>marked raw object: {{ markedrawobject.name }} - {{ markedrawobject.value }}</p>
    <p>reactive object: {{ reactiveobject.name }} - {{ reactiveobject.value }}</p>
  </div>
</template>

请注意,即使 markedrawobject 的属性在模板中显示出来了,但由于它是原样对象,所以对其属性的修改不会触发视图的更新。而 reactiveobject 的属性修改则会触发视图的更新。

markraw 的主要用途是当你确定某个对象不需要响应性时,避免不必要的性能开销和潜在的错误。这在处理第三方库、大型数据对象或性能敏感的场景中特别有用。

到此这篇关于vue3中markraw示例详解的文章就介绍到这了,更多相关vue3 markraw内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com