浅析Vue3动态组件怎么进行异常处理
创始人
2024-03-16 04:58:58
0

Vue3动态组件怎么进行异常处理?下面本篇文章带大家聊聊Vue3 动态组件异常处理的方法,希望对大家有所帮助!

 

动态组件有两种常用场景:

一是动态路由:

// 动态路由
export const asyncRouterMap: Array = [{path: '/',name: 'index',meta: { title: '首页' },component: BasicLayout, // 引用了 BasicLayout 组件redirect: '/welcome',children: [{path: 'welcome',name: 'Welcome',meta: { title: '引导页' },component: () => import('@/views/welcome.vue')},...]}
]

二是动态渲染组件,比如在 Tabs 中切换:


在 vue2 中使用并不会引发什么其他的问题,但是当你将组件包装成一个响应式对象时,在 vue3 中,会出现一个警告:

Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with markRaw or using shallowRef instead of ref.

出现这个警告是因为:使用 reactive 或 ref(在 data 函数中声明也是一样的)声明变量会做 proxy 代理,而我们组件代理之后并没有其他用处,为了节省性能开销,vue 推荐我们使用 shallowRef 或者 markRaw 跳过 proxy 代理。

解决方法如上所说,需要使用 shallowRef 或 markRaw 进行处理:

对于 Tabs 的处理:

import { markRaw, ref } from 'vue'
import A from './components/A.vue'
import B from './components/B.vue'
interface ComponentList {name: stringcomponent: Component// ...
}const tab = ref([{name: "组件 A",component: markRaw(A)
}, {name: "组件 B",component: markRaw(B)
}])

对于动态路由的处理:

import { markRaw } from 'vue'// 动态路由
export const asyncRouterMap: Array = [{path: '/',name: 'home',meta: { title: '首页' },component: markRaw(BasicLayout), // 使用 markRaw// ...}
]

 而对于 shallowRef 和 markRaw,2 者的区别在于 shallowRef 只会对 value 的修改做出反应,比如:

const state = shallowRef({ count: 1 })
// 不会触发更改
state.value.count = 2
// 会触发更改
state.value = { count: 2 }

而 markRaw,是将一个对象标记为不可被转为代理。然后返回该对象本身。

const foo = markRaw({})
console.log(isReactive(reactive(foo))) // false
// 也适用于嵌套在其他响应性对象
const bar = reactive({ foo })
console.log(isReactive(bar.foo)) // false

可看到,被 markRaw 处理过的对象已经不是一个响应式对象了。

对于一个组件来说,它不应该是一个响应式对象,在处理时,shallowRef 和 markRaw 2 个 API,推荐使用 markRaw 进行处理。

以上就是浅析Vue3动态组件怎么进行异常处理的详细内容,有不当的地方还请大家多多指教

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...