vue3动态组件组件shallowRef包裹问题

这篇具有很好参考价值的文章主要介绍了vue3动态组件组件shallowRef包裹问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在vue3做tabs切换功能的时候,如果导入的组件不适用shallowRef包裹会显示下面的警告:

Home.vue?t=1708401434509:43 [Vue warn]: Vue received a Component that 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`. 
Component that was made reactive:  {__hmrId: '2afd162d', __file: 'D:/v3code/my-big-charts/src/components/Comp7.vue', render: ƒ} 
  at <Home onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< Proxy(Object) {__v_skip: true} > > 
  at <RouterView> 
  at <App>

根据提示代码修改如下:

<script setup>
import {ref,reactive,readonly,computed,watch,watchEffect,markRaw,shallowRef} from 'vue'
import Comp7 from '../components/Comp7.vue'
import Comp6 from '../components/Comp6.vue'
const activeComp = shallowRef(Comp6)
const tab = reactive([{
    name: "A组件",
    comName: shallowRef(Comp6)
}, {
    name: "B组件",
    comName: shallowRef(Comp7
}])
const change = index=>{
    activeComp.value = tab[index].comName
}
</script>
<template>
    <ul>
        <li v-for="(item,index) in tab" :key="item.name" @click="change(index)">{{ item.name }}</li>
    </ul>
    <div>
        <component :is="activeComp"></component>
    </div>
</template>

就能解决上面的问题。文章来源地址https://www.toymoban.com/news/detail-835217.html

到了这里,关于vue3动态组件组件shallowRef包裹问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Vue3 知识第六讲】ref、 shallowRef、unref、isRef 等系列知识应用

    ref() 方法接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value ref 对象是可更改的,也就是说你可以为 .value 赋予新的值。它也是响应式的,即所有对 .value 的操作都将被追踪,并且写操作会触发与之相关的副作用。 如果将一个对

    2024年02月09日
    浏览(26)
  • vue3 动态组件和异步组件

    当使用 component :is=\\\"...\\\" 来在多个组件间作切换时,被切换掉的组件会被卸载。我们可以通过 KeepAlive组件强制被切换掉的组件仍然保持“存活”的状态。

    2024年02月08日
    浏览(33)
  • (vue3)动态组件

    什么是动态组件 就是:让多个组件使用同一个挂载点,并动态切换,这就是动态组件。 在挂载点使用component标签,然后使用v-bind:is=”组件 ,通过is 切换 A B 组件 使用场景 tab切换 居多 注意事项  1.在Vue2 的时候is 是通过组件名称切换的 在Vue3 setup 是通过组件实例切换的 2.如

    2024年02月13日
    浏览(25)
  • vue3动态组件

     1 、 可以通过  shallowRef 把  可以把组件进行包裹 为什么用shallowRef      如果传入基本数据类型,那么 shallowRef 与 ref 的作用基本没有什么区别,也就是浅层的 ref 的内部值将会原样的存储和暴露,并不会被深层递归地转为响应式 当我们使用ref   会有提醒建议使用  shallowRef  

    2024年02月12日
    浏览(21)
  • Vue3 动态组件

    父组件 子组件A,B,C 点击A显示A组件内的信息,点击B显示B组组件内的信息

    2024年02月12日
    浏览(27)
  • Vue3技术6之toRef和toRefs、shallowReactive与shallowRef、readonly与shallowReadonly

    App.vue Demo.vue 原理: App.vue DemoTwo.vue 作用:创建一个ref对象,其value值指向另一个对象中的某个属性 语法: const name=toRef(person,‘name’) 应用:要将响应式对象中的某个属性单独提供给外部使用时 扩展: toRefs 与 toRef 功能一致,但可以批量创建多个ref 对象,语法: toRefs(perso

    2023年04月24日
    浏览(29)
  • vue3动态加载组件

    当 is 是字符串,它既可以是 HTML 标签名也可以是组件的注册名。 或者,is 也可以直接绑定到组件的定义。 内置组件都可以传递给 is,但是如果想通过名称传递则必须先对其进行注册。 如果将组件本身传递给 is 而不是其名称,则不需要注册。 vue官方文档-component内置动态组件

    2024年02月13日
    浏览(27)
  • vue3 reactive包裹数组无法页面无法响应式

    原代码如下: 此时removeItem方法运行,打印出historyAccount的值确实被改变了,但是页面还是没有变化 原因: 如果你直接通过赋值的方式改变 reactive 对象引用的数组,是不会触发视图的更新的,应该使用 Vue 提供的响应式方法来更新响应式数据。  改进:可以利用splice方法删除

    2024年04月09日
    浏览(33)
  • VITE+VUE3动态导入组件

    通常的动态组件导入方式   vue中又是时候我们会使用到动态组件导入,比如路由组件的动态导入,一般类似路由组件的动态导入的方式: ()=import(path); ()=defineAsyncComponent(()=import(path)) vite中使用的错误 但是这写方式进行动态导入组件的时候在vite+vue3项目下都是不行的,开发

    2024年02月14日
    浏览(33)
  • VUE3+vite项目中动态引入组件和异步组件

    1. 把项目中所有vue文件注册成异步组件。 2. 获取组件 在setup函数获取组件 3. 参考如下 Glob 导入 Vite 支持使用特殊的 import.meta.glob 函数从文件系统导入多个模块: 以上将会被转译为下面的样子: 你可以遍历 modules 对象的 key 值来访问相应的模块: 匹配到的文件默认是懒加载的

    2024年02月10日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包