vue3动态组件

1 、 可以通过 shallowRef 把 可以把组件进行包裹

javascript 复制代码
<template>
    <div>
        <el-button @click="setclick(son1)">1111</el-button
        ><el-button @click="setclick(son2)">2222</el-button
        ><el-button @click="setclick(son3)">3333</el-button>
        <component :is="cod" />
    </div>
</template>

<script setup>
/* eslint-disable*/
import { shallowRef } from "vue";
import son1 from "./son1.vue";
import son2 from "./son2.vue";
import son3 from "./son3.vue";
let cod = shallowRef(son1);
const setclick = (val) => {
    cod.value = val;
};
</script>

为什么用shallowRef 如果传入基本数据类型,那么shallowRef与ref的作用基本没有什么区别,也就是浅层的ref的内部值将会原样的存储和暴露,并不会被深层递归地转为响应式

当我们使用ref 会有提醒建议使用 shallowRef

在Vue3 setup 是通过组件实例切换

如果你把组件实例放到Reactive Vue会给你一个警告runtime-core.esm-bundler.js:38 Vue warn: 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. Component that was made reactive:

这是因为reactive 会进行proxy 代理 而我们组件代理之后毫无用处 节省性能开销 推荐我们使用shallowRef 或者 markRaw 跳过proxy 代理

但是使用markRaw 时无效的

markRaw : 可以吧一个用reactive包裹的响应式变成不具备响应式的功能

相同功能有 toRaw 也同样可以吧响应式变成普通对象

区别: markRaw 趋向于可以把某个对象的某个属性改变成普通对象 而toRaw 是全部

相关推荐
IT_陈寒21 分钟前
SpringBoot实战技巧总结
前端·人工智能·后端
TeamDev25 分钟前
使用 JxBrowser 在桌面应用中集成 Spring
java·前端·后端·spring·混合应用·jxbrowser·浏览器控件
陈随易2 小时前
Rolldown 把插件改动回传提速 26 倍
前端·后端·程序员
笃行3509 小时前
集中式与分布式,KingbaseES 的四种形态共用一套内核
前端
陈随易10 小时前
Vue 编译器换掉 source map,快了三四成
前端·后端·程序员
ZhengEnCi12 小时前
12 种高级 UI 交互效果及对应 AI 提示词:从按压回弹到底部抽屉的物理感教学
前端·css·交互设计
IT_陈寒14 小时前
Redis大key删除为什么会导致服务卡顿?我的线上事故复盘
前端·人工智能·后端
系统集成-鹰翔14 小时前
ERP图片改名后仍命中识别缓存:缓存键、十分钟到期与调用计数
javascript·经验分享·后端
用户27050777252415 小时前
MCP 最小 Server 实测:3 个 JSON-RPC 报错与修法
前端
用户4993350250715 小时前
一人VIP账号多人共用:Web 代理里的会话共享怎么实现
前端