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 如果传入基本数据类型,那么shallowRefref的作用基本没有什么区别,也就是浅层的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 是全部

相关推荐
用户97016150168几秒前
浏览器切到后台后,AI 给我的代码就失效了:我拿 3 个模型测了 6 个定时器坑
前端·代码规范
蓝星空20005 分钟前
GPT Image 2.5 生图模型已上线,支持 Flare 与 Sunburst 型号选择
前端·gpt·aigc·image2·imagen
何何____17 分钟前
js常见继承方法详解
前端·javascript
parade岁月22 分钟前
Tailwind CSS 加入 Shopify,正在用 Tailwind 的项目要不要调整?
前端
梨想橙汁35 分钟前
Vue2 快速入门:环境搭建、模板语法、指令系统全解
前端·vue.js
King of fraud39 分钟前
HTML 页面的 CSS 选择器详解
前端·css·html
lichenyang45340 分钟前
ASCF 元服务如何区分“后台恢复”与“携参拉起”:后台标记 + 参数指纹方案
前端
前端 贾公子41 分钟前
Milvus使用指南 (下)
java·服务器·前端
用户2462035827811 小时前
TypeScript类型建模与前后端错误码协议:手机号绑定场景的工程实践
前端
吴长建先生1 小时前
5步搞定random access memories源码解析 告别报错
vue.js