当前位置: 首页 > news >正文

Vue 3与React内置组件全对比

下面整理了 Vue 3React 中常见的内置组件与函数的知识框架,并一一说明其作用与适用场景。


一、知识架构全览

Vue 内置组件与功能(Vue 3)

  • Teleport
  • Suspense
  • Transition / TransitionGroup
  • KeepAlive
  • Fragments(多根节点支持)
  • Composition API(尽管不是“组件”,但也是核心机制)

React 内置组件与函数

  • Fragment
  • createPortal
  • Suspense
  • lazy() + Suspense
  • (其他功能如 flushSynccreateRoot 虽是 API,但不属于 UI 组件,这里主要聚焦 UI 相关部分)

二、详细功能说明与对比

Vue 内置组件说明

1. <Teleport>
  • 作用:将组件的一部分渲染到 DOM 中的指定节点之外,脱离当前组件的 DOM 层级 。(Vue.js, The Software House)
  • 典型用途:模态框、工具提示(tooltip)、通知等脱离布局流的 UI 元素。(Vue.js, vue-cheatsheet.themeselection.com)
  • 新特性:Vue 3.5 引入 defer 属性,让目标节点无需提前存在;并可和 <Transition> 搭配使用,支持动画效果。(Ninja Squad)
2. <Suspense>
  • 作用:为带有异步依赖的组件树提供统一加载状态控制,通过 fallback slot 显示备用内容。(Vue.js, vue-cheatsheet.themeselection.com)
  • 适用场景:异步 setup()、异步组件等。可避免多个独立 loading 状态导致的“爆米花效应”。(Vue.js, Vue School)
  • 高级用法:可嵌套 Suspense 提供分层加载策略,提升用户体验。(Vue School)
3. <Transition> / <TransitionGroup>
  • 作用:为单个或多个元素提供进入/离开动画效果。(Vue.js)
  • 场景:元素切换、列表动画等。
4. <KeepAlive>
  • 作用:为动态组件缓存状态,防止频繁销毁、重建。(Vue.js)
  • 场景:Tab页切换、需要保留状态的组件展示。
5. Fragments(多根节点支持)
  • 作用:Vue 3 支持组件模板中存在多个根节点,无需额外包装元素。(pieces.app)
  • 优势:简洁灵活,减少无意义 DOM。
6. Composition API
  • 说明:不是“组件”,但提供逻辑复用(setupreactiverefcomputedwatch 等),提升组织结构与 TypeScript 支持。(The Software House)

React 内置组件 / 函数说明

1. Fragment (<>...</>)
  • 作用:允许返回多个子元素,而不引入多余 DOM 节点。
  • 场景:渲染列表、兄弟节点结构等。
2. createPortal
  • 作用:将子组件渲染到指定 DOM 节点中,脱离当前结构。(React, React)
  • 注意:事件仍按 React 树而非 DOM 树传播,上下文也可穿透。(React, React)
  • 用途:模态框、浮层、Toast、工具提示等。(Refine)
3. Suspense + lazy()
  • Suspense

    • 作用:为异步组件或数据加载提供 fallback UI,直到依赖完成。(contentful.com, hygraph.com)
    • 高级功能:可嵌套以实现渐进加载。(React, hygraph.com)
  • lazy()

    • 作用:实现组件懒加载,按需加载代码。(Bits and Pieces)
    • 通常与 Suspense 配合使用实现金可折叠加载效果。

三、功能框架对照表

功能类别Vue 组件/APIReact 组件/API典型用途
DOM 控制<Teleport>createPortal()模态框、浮层、工具提示
异步加载<Suspense>Suspense + lazy()懒加载组件、数据加载的加载占位处理
多根节点支持多根节点模板(Fragment 无需额外 API)Fragment返回并列子节点,无包装元素
状态持久化<KeepAlive>— (React 本身无类似内置)缓存组件状态,避免销毁重建
动画处理<Transition> / <TransitionGroup>CSS / Animation libraries元素切入切出动画
逻辑复用机制Composition APIHooks(useStateuseEffect等)组件逻辑组织与复用

四、使用建议

  • Vue

    • 使用 <Teleport> 在结构中灵活定位 UI;
    • 使用 <Suspense> 简化异步依赖处理;
    • <KeepAlive> 保持组件状态;
    • 用 transition 系列处理动画;
    • 利用 Composition API 组织组件逻辑。
  • React

    • 使用 Fragment 保持结构洁净;
    • createPortal 构建脱离布局的 UI;
    • 利用 lazy() + Suspense 实现按需加载与占位优化。

希望这份以“逻辑分类 + 功能对比”为核心的知识框架,对你理解 Vue 和 React 中的内置组件和函数非常有帮助!如果你希望深入某个功能(例如 Teleport 的场景、Suspense 在 SSR 中的用法等),欢迎继续告诉我~


以下是前端框架(React/Vue)中用于解决特定场景的核心组件/函数及其扩展,按功能分类说明:


🚀 一、核心组件/函数

  1. Portal(React)/ Teleport(Vue)

    • 用途:将组件内容渲染到 DOM 树的任意位置(如 body 下),突破父组件层级限制。
    • 场景:模态框、全局通知、悬浮菜单等需脱离父容器样式的 UI。
    • 示例
      // React(createPortal)
      ReactDOM.createPortal(<Modal />, document.body);
      // Vue(Teleport)
      <Teleport to="body"><Modal /></Teleport>
      
  2. Fragment(React/Vue 3)

    • 用途:允许组件模板返回多个根节点,避免无意义的包裹元素。
    • 场景:表格/列表布局、语义化 HTML 结构优化。
    • 示例
      // React
      <> <Header /> <Main /> </>
      // Vue 3
      <template> <header /> <main /> </template>
      
  3. Suspense(React/Vue 3)

    • 用途:处理异步组件加载状态,展示备用内容(如加载动画)。
    • 场景:懒加载组件、数据请求等待期。
    • 示例
      // React
      <Suspense fallback={<Spinner />}><AsyncComponent />
      </Suspense>
      // Vue 3
      <Suspense><template #fallback>Loading...</template></Suspense>
      

二、扩展组件/函数(React)

  1. Error Boundary(错误边界)

    • 用途:捕获子组件的 JavaScript 错误并展示降级 UI。
    • 场景:防止局部错误导致整个应用崩溃。
    • 实现
      class ErrorBoundary extends React.Component {state = { hasError: false };static getDerivedStateFromError() {return { hasError: true };}render() {return this.state.hasError ? <FallbackUI /> : this.props.children;}
      }
      
  2. Profiler(性能分析)

    • 用途:测量组件渲染时间和资源消耗。
    • 场景:性能优化调试。
    • 示例
      <Profiler id="App" onRender={(metrics) => console.log(metrics)}><App />
      </Profiler>
      
  3. StrictMode(严格模式)

    • 用途:检测潜在问题(如废弃 API 使用、副作用风险)。
    • 场景:开发环境辅助调试。

🔮 三、扩展组件/函数(Vue)

  1. KeepAlive(缓存组件)

    • 用途:缓存动态组件状态,避免重复渲染。
    • 场景:标签页切换、路由视图缓存。
    • 示例
      <KeepAlive><component :is="currentComponent" />
      </KeepAlive>
      
  2. Transition(过渡动画)

    • 用途:为元素添加进入/离开的 CSS 动画。
    • 场景:列表排序、模态框淡入淡出。
    • 示例
      <Transition name="fade"><div v-if="show">Content</div>
      </Transition>
      
  3. PortalVue(Vue 2 的 Teleport 替代)

    • 用途:Vue 2 中实现类似 Teleport 的功能(需第三方库)。
    • 场景:兼容旧版 Vue 的模态框需求。

💡 四、通用优化类组件

  1. memo(React)/ v-memo(Vue 3)

    • 用途:缓存组件输出,避免不必要的重渲染。
    • 场景:纯展示型组件性能优化。
  2. lazy(React)/ defineAsyncComponent(Vue 3)

    • 用途:异步加载组件(代码分割)。
    • 场景:减少首屏加载体积。
    • 示例
      // Vue 3
      const AsyncComp = defineAsyncComponent(() => import('./Component.vue'));
      

💎 总结:组件选择指南

场景推荐组件框架
跨 DOM 渲染Teleport(Vue)/ Portal(React)通用
多根节点Fragment通用
异步加载状态管理Suspense通用
错误隔离Error BoundaryReact
组件缓存KeepAliveVue
性能监测ProfilerReact

最佳实践

  • Portal/Teleport 优先用于全局 UI(如弹窗),避免层级冲突。
  • Suspense + 懒加载 提升首屏性能,配合骨架屏优化体验。
  • Fragment 替代冗余 <div> 包裹,尤其在表格/列表场景。
    通过组合使用这些组件,可显著提升代码可维护性、性能及用户体验。

下面是 Vue 3 与 React 中几个核心内置组件及函数的详细讲解,配合示例代码帮助你理解它们的功能、优势与适用场景。


Vue 3 内置组件

1. <Teleport>

  • 作用:将可视内容渲染到 DOM 树中的另一个位置,脱离当前组件层级结构。非常适合用于显示模态框、提示层、浮动菜单等脱离布局流的 UI 元素。
  • 文档引用:在 Vue 官方文档中明确指出 <Teleport> 可将组件模板部分传送至不同 DOM 节点 。
示例
<template><div><button @click="showModal = true">打开模态框</button><Teleport to="body" v-if="showModal"><div class="modal-overlay" @click="showModal = false"><div class="modal-content" @click.stop><h2>这是一个模态框</h2><button @click="showModal = false">关闭</button></div></div></Teleport></div>
</template>

2. <KeepAlive>

  • 作用:用于缓存动态组件的状态,当组件切换出去后再切回来时可保留之前状态,避免重新渲染。适用于保持滚动位置、表单输入等。
  • 文档引用:Vue 官方将 <KeepAlive> 介绍为用于动态组件缓存而非销毁 。
示例
<template><div><button @click="current = 'A'">组件 A</button><button @click="current = 'B'">组件 B</button><KeepAlive include="CompA"><component :is="current" /></KeepAlive></div>
</template><script setup>
import { ref } from 'vue';
import CompA from './CompA.vue';
import CompB from './CompB.vue';const current = ref('CompA');
</script>

3. <Transition><TransitionGroup>

  • 作用:为进入/离开或列表排列变化提供过渡动画支持。
  • 文档引用:Vue 提供 <Transition> 用于单个元素过渡,<TransitionGroup> 用于列表过渡和重排动画 。
示例(单个元素)
<template><div><button @click="show = !show">切换</button><Transition name="fade"><p v-if="show">带过渡的文本</p></Transition></div>
</template><style>
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
.fade-enter-from, .fade-leave-to {opacity: 0;
}
</style>

4. <Suspense>

  • 作用:协调异步组件/依赖加载,在等待加载期间显示 fallback 内容,可避免多余的 loading 状态闪烁。
  • 文档引用:Vue 的 <Suspense> 用于管理组件树中多个嵌套的异步依赖 。
示例
<template><Suspense><template #default><AsyncComp /></template><template #fallback><div>加载中...</div></template></Suspense>
</template><script setup>
import { defineAsyncComponent } from 'vue';const AsyncComp = defineAsyncComponent(() =>import('./HeavyComponent.vue')
);
</script>

5. <slot>

  • 作用:插槽机制用于组件内容分发,可实现高程度的复用和灵活布局。
  • 文档引用:Vue 对 <slot> 这类特殊元素有专门说明 。

React 内置组件 / API

1. Fragment (<Fragment><>...</>)

  • 作用:允许组件返回多个子节点而不添加额外 DOM 元素。
  • 文档引用:在 React 文档中被介绍为让组件返回多个元素时避免额外节点 。
示例
function List() {return (<><li>项 1</li><li>项 2</li></>);
}

2. createPortal

  • 作用:将子组件渲染到指定的 DOM 节点,脱离组件层级结构,常用于模态框、Toast 弹层等。
  • 文档引用:React 官方文档介绍 createPortal 返回一个可插入 JSX 的 React 节点 。
示例
import { createPortal } from 'react-dom';function Modal({ children, onClose }) {return createPortal(<div className="modal-overlay" onClick={onClose}><div className="modal-content" onClick={e => e.stopPropagation()}>{children}</div></div>,document.body);
}

3. Suspense + lazy()

  • 作用:实现组件异步加载并在加载期间使用 fallback UI。
  • 文档引用:React 文档提供了 React.lazy 和 Suspense 的详细配合指南 。
示例
import { Suspense, lazy } from 'react';const LazyComp = lazy(() => import('./MyComponent'));function App() {return (<Suspense fallback={<div>加载中...</div>}><LazyComp /></Suspense>);
}

4. <StrictMode>

  • 作用:启用开发模式下的额外检查帮助发现潜在问题,如不安全生命周期、遗留 API 等。
  • 文档引用:React 文档指出 <StrictMode> 不渲染 UI,仅用于开发模式的警告和检查 。

5. <Profiler>

  • 作用:测量组件渲染性能,可用于分析渲染频率和成本。通常搭配 React DevTools 使用。
  • 文档引用:React 文档中介绍 <Profiler> 可编程收集渲染性能指标 。

总结对照表

功能类别Vue 组件/APIReact 组件/API
多根节点支持模板中自然支持多根节点Fragment
DOM 层渲染控制<Teleport>createPortal
异步加载处理<Suspense>Suspense + lazy()
动画/过渡<Transition> / <TransitionGroup>CSS 动画或第三方动画库
状态缓存与持久化<KeepAlive>
内容分发<slot>Props.children
开发检查机制<StrictMode>
性能分析<Profiler>

如果你对某个组件或功能(如 Teleport 的 advanced use, Suspense 嵌套策略,Profiler 事件指标等)想深入了解,欢迎继续告诉我!

http://www.lryc.cn/news/622823.html

相关文章:

  • RK3588芯片在AR眼镜中的核心技术优势是什么?
  • MySQL的三大范式:
  • AI驱动的性能测试:如何用机器学习预测系统瓶颈?
  • ABAP AMDP 是一项什么技术?
  • .NET8下的Garnet使用
  • MySQL查询性能慢时索引失效的排查与优化实践
  • 进程替换:从 “改头换面” 到程序加载的底层逻辑
  • Markdown 生成 Gantt 甘特图
  • 马拉松|基于SSM的马拉松报名系统微信小程序的系统设计与实现(源码+数据库+文档)
  • RK3568 NPU RKNN(一):概念理清
  • 《Leetcode》-面试题-hot100-技巧
  • DBngin:告别数据库多版本环境管理的烦恼
  • FastDeploy2.0:Prometheus3.5.0通过直接采集,进行性能指标分析
  • 利用DeepSeek编写使用libcsv解析csv文件并用libxlsxwriter写入xlsx文件的C程序
  • FP16(半精度)和FP32(单精度)
  • Javar如何用RabbitMQ订单超时处理
  • pidgen!DecodeProdKey函数分析之iDecodedBytesMax
  • 【自用】JavaSE--特殊文件Properties与XML、日志技术
  • 驱动开发系列63 - 配置 nvidia 的 open-gpu-kernel-modules 调试环境
  • 智能二维码刷卡人脸识别梯控控制器硬件规格书​
  • USB PD 简介
  • 各种读取csv文件的工具性能比较
  • C语言(11)—— 数组(超绝详细总结)
  • 【DP】单词的划分
  • 机器学习的特征工程(特征构造、特征选择、特征转换和特征提取)详解
  • MATLAB R2010b系统环境(二)MATLAB环境的准备
  • React手撕组件和Hooks总结
  • 自动化测试的下一站:AI缺陷检测工具如何实现“bug提前预警”?
  • illustrator插件大全 免费插件介绍 Ai设计插件集合 (3)
  • 知识点汇总linuxC高级 -2系统命令压缩与链接