浅析Vue3动态组件怎么进行异常处理

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

浅析Vue3动态组件怎么进行异常处理

【相关推荐:vuejs视频教程】

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

一是动态路由:

立即学习“前端免费学习笔记(深入)”;

  1. // 动态路由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 中切换:

  1.                                                                     {{ item.name }}                                // 关键在这里                            

登录后复制

在 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 的处理:

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

登录后复制

对于动态路由的处理:

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

登录后复制

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

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

登录后复制

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

  1. 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 进行处理。

(学习视频分享:vuejs视频教程、vuejs视频教程)

以上就是浅析Vue3动态组件怎么进行异常处理的详细内容,更多请关注【创想鸟】其它相关文章!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

点点赞赏,手留余香

给TA打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    编程技术

    聊聊Vue怎么通过JSX动态渲染组件

    2025-4-1 16:48:20

    编程技术

    (超详细)vue怎么进行路由跳转?三种方式分享

    2025-4-1 16:48:29

    0 条回复 A文章作者 M管理员
    欢迎您,新朋友,感谢参与互动!
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    私信列表
    搜索