vue3中markRaw详解

2024-04-02 23:12

本文主要是介绍vue3中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详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/871316

相关文章

Java中的stream流分组示例详解

《Java中的stream流分组示例详解》Java8StreamAPI以函数式风格处理集合数据,支持分组、统计等操作,可按单/多字段分组,使用String、Map.Entry或Java16record... 目录什么是stream流1、根据某个字段分组2、按多个字段分组(组合分组)1、方法一:使用 Stri

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.