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

“组件、路由懒加载”,在 Vue3 和 React 中分别如何实现? (copy)

Vue3 和 React 组件懒加载实现方式

React 中组件懒加载的实现方式

React 提供了 React.lazySuspense 两个 API 来实现组件的懒加载。React.lazy 用于动态导入组件,而 Suspense 则用于指定加载过程中的占位内容。例如,可以通过以下代码实现懒加载:

import React, { Suspense } from 'react';const OtherComponent = React.lazy(() => import('./OtherComponent'));function App() {return (<div><Suspense fallback={<div>Loading...</div>}><OtherComponent /></Suspense></div>);
}

此外,在路由级别上也可以使用懒加载。通过结合 React.lazySuspense,可以按需加载不同的路由模块4

import React, { Suspense, lazy } from 'react';
import { Route, Switch } from 'react-router-dom';const Home = lazy(() => import('./Home'));
const About = lazy(() => import('./About'));function App() {return (<Suspense fallback={<div>Loading...</div>}><Switch><Route exact path="/" component={Home} /><Route path="/about" component={About} /></Switch></Suspense>);
}
Vue3 中组件懒加载的实现方式

在 Vue3 中,可以通过动态导入语法来实现组件的懒加载。例如,可以在 defineAsyncComponent 的帮助下实现懒加载

import { defineAsyncComponent } from 'vue';const AsyncComponent = defineAsyncComponent(() => import('./MyComponent.vue'));export default {components: {AsyncComponent,},
};

Vue3 中 defineAsyncComponent 的作用及懒加载实现

在 Vue3 中,defineAsyncComponent 是用于定义异步组件的 API,它允许开发者通过动态导入的方式实现组件的懒加载。这种方式能够显著减少首屏加载时的资源消耗,提升页面性能。

defineAsyncComponent 的基本用法

最简单的用法是直接传入一个返回 Promise 的函数(通常为 import()),该函数负责加载组件:

import { defineAsyncComponent } from 'vue';const AsyncComponent = defineAsyncComponent(() => import('./MyComponent.vue'));

此外,还可以传入一个包含更多选项的对象,以增强功能3

const AsyncPopup = defineAsyncComponent({loader: () => import('./ArticleList.vue'), // 异步加载组件的函数loadingComponent: LoadingComponent, // 加载中显示的组件errorComponent: ErrorComponent, // 加载失败时显示的组件delay: 200, // 延迟显示加载组件的时间(默认 200ms)timeout: 3000 // 超过此时间未加载成功则显示错误组件(默认 Infinity)
});

通过上述配置,可以更灵活地控制组件加载过程中的用户体验。

同时,Vue3 还支持图片懒加载功能,借助插件如 vue3-lazyload 可以更方便地实现懒加载效果2。以下是使用 vue3-lazyload 插件的一个示例:

import VueLazyload from 'vue3-lazyload';app.use(VueLazyload, {loading: '/path/to/loading-image.png',error: '/path/to/error-image.png',
});

模板中可以这样使用:

                  HTML<template><img v-lazy="imageSrc" alt="Lazy loaded image" />
</template><script>
export default {data() {return {imageSrc: 'https://example.com/image.jpg',};},
};
</script>

http://www.xdnf.cn/news/12547.html

相关文章:

  • 使用Python和Flask构建简单的机器学习API
  • MySQL事务与锁中的MVCC 深度解析与面试题讲解
  • Spring AI 核心工作流
  • 每日Prompt:治愈动漫插画
  • 基于深度学习的金枪鱼各类别目标检测含完整数据集
  • Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新无人机跟踪
  • 【C/C++】实现固定地址函数调用
  • 2种官方方法关闭Windows防火墙
  • iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform
  • 将单体架构项目拆分成微服务时的两种工程结构
  • 阿里云MaxCompute入门
  • 堆排序的详细解读
  • 5.3.2_2二叉树的线索化
  • 物联网协议之MQTT(二)服务端
  • web端rtmp推拉流测试、抽帧识别计数,一键式生成巡检报告
  • 【第六篇】 SpringBoot的日志基础操作
  • 主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
  • 408第一季 - 数据结构 - 树与二叉树
  • 数 据 结 构 进 阶:哨 兵 位 的 头 结 点 如 何 简 化 链 表 操 作
  • btstack协议栈---Ubuntu驱动CSR8510 USB Dongle
  • 数学:花括号在数学中的应用详解
  • 35 C 语言字符串转数值函数详解:strtof、strtod、strtold(含 errno 处理、ERANGE 错误)
  • Ubuntu挂载本地镜像源(像CentOS 一样挂载本地镜像源)
  • 什么是高考?高考的意义是啥?
  • Ubuntu下有关UDP网络通信的指令
  • Linux 下关于 ioremap 系列接口
  • 虚幻引擎5-Unreal Engine笔记之SET节点的输出引脚获取设置后的最新变量值
  • 【力扣链表篇】19.删除链表的倒数第N个节点
  • ASTRA论文总结
  • PDF转PPT转换方法总结