Vue3动态组件如何进行异常处理


这篇“Vue3动态组件如何进行异常处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue3动态组件如何进行异常处理”文章吧。动态组件有两种常用场景:一是动态路由:

//动态路由
exportconstasyncRouterMap: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'

importAfrom'./components/A.vue'
importBfrom'./components/B.vue'

interfaceComponentList{
name:string
component:Component
//...
}

consttab=ref([{
name:"组件A",
component:markRaw(A)
},{
name:"组件B",
component:markRaw(B)
}])

对于动态路由的处理:

import{markRaw}from'vue'

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

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

conststate=shallowRef({count:1})

//不会触发更改
state.value.count=2

//会触发更改
state.value={count:2}

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

constfoo=markRaw({})
console.log(isReactive(reactive(foo)))//false

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

可看到,被 markRaw 处理过的对象已经不是一个响应式对象了。对于一个组件来说,它不应该是一个响应式对象,在处理时,shallowRef 和 markRaw 2 个 API,推荐使用 markRaw 进行处理。以上就是关于“Vue3动态组件如何进行异常处理”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注百云主机行业资讯频道免费云主机域名

相关推荐: .Net Core日志记录器如何实现

这篇文章主要介绍“.NetCore日志记录器如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.NetCore日志记录器如何实现”文章能帮助大家解决问题。ILoggerFactory是日志记录器的工厂接口类,用于配…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/25 15:59
下一篇 02/25 16:19

相关推荐