Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一个插件轻松搞定 React 路由页面预加载!

一个插件轻松搞定 React 路由页面预加载!

作者头像
萌萌哒草头将军
发布于 2025-05-17 07:17:21
发布于 2025-05-17 07:17:21
8300
代码可运行
举报
文章被收录于专栏:前端框架前端框架
运行总次数:0
代码可运行

前言

最近接到的另一个任务:优化项目里每个模块的加载速度!

我突发奇想,如果在用户还没点击跳转的情况下就将组件准备好,会不会更快一些了?

这篇我将介绍如何通过 react-lazy-with-preload 库提高页面的响应速度!

正文

鼠标悬停预加载

react-lazy-with-preload 扩展了 React.lazy 的功能,允许开发者在特定时机提前加载组件!

例如,在一个包含 /home/about 页面的应用中,我们可以在用户将鼠标悬停在路由跳转的按钮时,预加载 About 组件。这样,当用户点击按钮时,页面可以立即渲染,无需等待组件加载!

实现这一效果非常简单。首先,使用 lazyWithPreload 替换 lazy 方法引入组件然后,在 Home 组件的按钮上添加 onMouseEnter 事件,触发预加载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Suspense, useState } from"react";
import { BrowserRouter, Routes, Route, Link } from"react-router-dom";
import lazyWithPreload from"react-lazy-with-preload";

// 懒加载 About 组件
const About = lazyWithPreload(() =>import("./About"));

// Home 页面组件
function Home() {
const [isPreloading, setIsPreloading] = useState(false);

const handleMouseEnter = () => {
    About.preload();
    setIsPreloading(true);
  };

const handleMouseLeave = () => {
    setIsPreloading(false);
  };

return (
    <div>
      <h1>Home Page</h1>
      <Link to="/about">
        <button onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>
          Go to About
        </button>
      </Link>
      {isPreloading && <div>Preloading...</div>}
    </div>
  );
}

// 应用入口
function App() {
return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route
          path="/about"
          element={
            <Suspense fallback={<div>Loading...</div>}>
              <About />
            </Suspense>
          }
        />
      </Routes>
    </BrowserRouter>
  );
}

exportdefault App;

我们可以看到在鼠标经过按钮时,已经发送了 JSX 文件的网络请求!

经过前是这样的
经过前是这样的

经过前是这样的

鼠标经过时
鼠标经过时

鼠标经过时

不过由于 preload 基于 import(),它不支持直接通过 AbortController 取消加载!我觉得它这是其唯一的不足了!

当然,TanStack Router 这个库可以做到取消预加载请求,但是需要大规模改动代码,我就放弃了!

最后

react-lazy-with-preload 是一个简单而高效的工具,通过鼠标悬停预加载和鼠标移出取消加载的功能,帮助开发者打造流畅的 React 应用!

今天的分享就这些了,感谢大家的阅读,如果文章中存在错误的地方欢迎指正!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌萌哒草头将军 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React项目实战(React后台管理系统、TypeScript+React18)
官网:https://ant.design/docs/react/introduce-cn
王小婷
2023/11/21
1.2K0
React项目实战(React后台管理系统、TypeScript+React18)
初探 MicroApp,一个极致简洁的微前端框架
在微前端的领域里,相信大家都听说过阿里的 qiankun。我自己在上几个月也一直用它来做一些实践:
写代码的海怪
2022/03/30
1.7K0
初探 MicroApp,一个极致简洁的微前端框架
大爱并发模式!React Router 路由跳转最佳实践的秘密
在 Next.js 大热之前,React Router 是 React 生态中,最流行的路由库。也是我最喜爱的路由库。不过随着版本的迭代,React Router 变得越来越庞大了。他的复杂度已经快要比得上一个框架了。
用户6901603
2024/06/07
5870
大爱并发模式!React Router 路由跳转最佳实践的秘密
react-RouterV6
替代routes组件,以 JavaScript 对象的结构生成routes路由模版,省去了嵌套循环。
程序员王天
2023/10/18
3080
基于webpack4+react 的js懒加载
此处主要介绍使用动态导入(通过模块中的内联函数调用来分离代码)的懒加载。这种动态代码拆分的方式是webpack提供并推荐选择的方式。其原理是使用符合 ECMAScript 提案 的 import() 语法 来实现动态导入。
shirley
2019/03/24
4.4K0
React 路由守卫 Guarded Routes
在现代 Web 应用中,路由守卫(Guarded Routes)是一种常见的模式,用于在用户访问特定路由之前进行权限检查或其他逻辑验证。React 生态系统中,最常用的路由库是 react-router-dom,它提供了丰富的 API 来实现路由守卫。本文将从浅到深地介绍 React 路由守卫的基本概念、常见问题、易错点及如何避免这些问题,并通过具体的代码案例进行解释。
Jimaks
2024/11/10
4340
React 路由守卫 Guarded Routes
React技巧之鼠标悬浮添加行内样式
原文链接:https://bobbyhadz.com/blog/react-inline-style-hover[1]
chuckQu
2022/08/19
2.1K0
React技巧之鼠标悬浮添加行内样式
React Router V6详解
SAP全称是【single-page application】,中文译为单页面应用。它是网站应用的一种模型,可以动态重写当前的页面来与用户交互,而不需要重新加载整个页面。相对于传统的 Web 应用程序,单页应用做到了前后端分离,即后端只负责处理数据提供接口,而页面逻辑和页面渲染都交由前端处理。前端发展到现在,单页应用的使用已经很广泛,目前时兴的 React、Vue、Angular 等前端框架均采用了 SPA 原则。
xiangzhihong
2023/01/06
8.2K0
细说React组件性能优化
React 组件性能优化的核心是减少渲染真实 DOM 节点的频率,减少 Virtual DOM 比对的频率。如果子组件未发生数据改变不渲染子组件。
xiaofeng123aa
2022/10/18
1.5K0
angular2路由预加载
1. 实现PreloadingStrategy 类 import { PreloadingStrategy, Route } from "@angular/router"; import { Observable } from "rxjs"; /** * 预加载策略 */ export class SelectivePreloadingStrategy implements PreloadingStrategy { preload(route: Route, load: Function): O
用户1437675
2018/08/20
1.1K0
react-router 的使用与优化
react-router 可以创建单页应用。可以将组件映射到路由上,将对应的组件渲染到想要渲染的位置(根据路径的变化渲染出组件)。
多云转晴
2020/03/11
3.5K0
react 同构初步(3)
后端ssr只是渲染了网页模板(ul),列表(li)的html都是异步请求加载出来的。再回看首页列表的代码:
一粒小麦
2019/12/19
1.6K0
react-react-dom v6 知识整合
1. BrowserRouter / HashRouter 相当于容器(类似router-view),用于指定路由的模式
用户9914333
2022/12/14
6.6K0
react-react-dom v6 知识整合
【路由】:路由那些事——上
前端三杰 Angular、React、Vue 都推荐单页面应用 SPA 开发模式,它们都有自己的前端路由解决方案:
WEBJ2EE
2021/04/07
1.9K0
React Router 6 (React路由) 最详细教程
React Router 经历多个版本的发展,现在已经到了 React Router 6。虽然网络上写 React-Router 路由本身的教程很多,但真正讲到 React-Router 6 的并不多。同时因为第 6 版引入了很多新的概念,以及大量使用 Hook,因此网上的很多旧教程已经不实用了。这篇文章里我们总结 React Router 6 路由器的用法,用例子说明如何实现各种场景和需求,比如程序化跳转等等。
蒋川
2022/03/29
24.9K3
React Router 6 (React路由) 最详细教程
解读 React Router v7:新功能与性能优化详解
今日推荐 《掌控软件管理:详解 APT、YUM 和 DNF 的使用方法》这篇文章介绍了软件包管理器帮助我们轻松地安装、更新、卸载和管理系统中的软件包。APT、YUM 和 DNF 是当前最流行的包管理器,分别用于不同的 Linux 发行版。本文将深入解析它们的使用方法,并通过代码示例展示如何高效地管理软件包。
Front_Yue
2024/11/24
4.3K0
解读 React Router v7:新功能与性能优化详解
React进阶篇(九)React Router
单页面应用(SPA)可以让Web应用看起来像多页面应用,URL变化时,不会向服务端发起请求,而是利用自身监听路由变化而更新UI。 通过使用React Router可以让Web应用根据不同URL渲染不同组件。
娜姐
2020/12/11
3.1K0
滴滴前端二面常考react面试题(持续更新中)_2023-03-01
refs允许你直接访问DOM元素或组件实例。为了使用它们,可以向组件添加个ref属性。
用户10376779
2023/03/01
4.7K0
React-router配置路由模块化及嵌套路由
在src目录下新建router文件夹创建index.js文件 注意导入路径,@为我项目配置路径,默认指向src目录 import { lazy } from 'react'; // 基于路由进行代码分割 // 经测试可进行路由懒加载 // https://zh-hans.reactjs.org/docs/code-splitting.html#route-based-code-splitting const router = [ { path: "/", c
明知山
2021/06/21
2.6K0
React 实战
只需要保证,在同一个数组中的兄弟元素之间的 key 是唯一的。而不需要在整个应用程序甚至单个组件中保持唯一。
王秀龙
2021/08/26
1.3K0
React 实战
相关推荐
React项目实战(React后台管理系统、TypeScript+React18)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验