千家信息网

怎么在Next.js项目中制作自定义加载屏幕

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了怎么在Next.js项目中制作自定义加载屏幕,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。制作自定义加载屏幕组件这部
千家信息网最后更新 2026年11月01日怎么在Next.js项目中制作自定义加载屏幕

这篇文章主要介绍了怎么在Next.js项目中制作自定义加载屏幕,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

制作自定义加载屏幕组件

这部分完全取决于您以及您希望加载屏幕组件的外观。例如下面是我的加载组件:

import React from "react";import styles from "./Loading.module.css";function Loading(props) {  return (
);}export default Loading;

加载组件的样式 (CSS):

.body_loading {  display: flex;  align-items: center;  justify-content: center;  height: 100vh;}.none {  display: none;}.lds_ellipsis {  display: inline-block;  position: relative;  width: 80px;  height: 80px;}.lds_ellipsis div {  position: absolute;  top: 33px;  width: 15px;  height: 15px;  border-radius: 50%;  background: var(--orange);  animation-timing-function: cubic-bezier(0, 1, 1, 0);}.lds_ellipsis div:nth-child(1) {  left: 8px;  animation: lds_ellipsis1 0.6s infinite;}.lds_ellipsis div:nth-child(2) {  left: 8px;  animation: lds_ellipsis2 0.6s infinite;}.lds_ellipsis div:nth-child(3) {  left: 32px;  animation: lds_ellipsis2 0.6s infinite;}.lds_ellipsis div:nth-child(4) {  left: 56px;  animation: lds_ellipsis3 0.6s infinite;}@keyframes lds_ellipsis1 {  0% {transform: scale(0);  }  100% {transform: scale(1);  }}@keyframes lds_ellipsis3 {  0% {transform: scale(1);  }  100% {transform: scale(0);  }}@keyframes lds_ellipsis2 {  0% {transform: translate(0, 0);  }  100% {transform: translate(24px, 0);  }}

因此,您已经成功地使用自定义样式构建了加载屏幕组件,现在是时候在每次路由更改时在 Web 应用程序上呈现它了。

为此,我们将借助 Next.js 路由器事件,您可以侦听 Next.js 路由器内部发生的不同事件。

以下是支持的事件列表:

routeChangeStart(url, { shallow }) - Fires when a route starts to changerouteChangeComplete(url, { shallow }) - Fires when a route changed completelyrouteChangeError(err, url, { shallow }) - Fires when there's an error when changing routes, or a route load is cancellederr.cancelled - Indicates if the navigation was cancelledbeforeHistoryChange(url, { shallow }) - Fires before changing the browser's historyhashChangeStart(url, { shallow }) - Fires when the hash will change but not the pagehashChangeComplete(url, { shallow }) - Fires when the hash has changed but not the page

有关这些事件和其他路由器方法的更多详细信息,您可以访问Next.js 官方文档

借助这些事件,您可以将加载屏幕组件添加到 app.js 中,看看如何:

首先导入{useState, useEffect}from "react",{useRouter}from"next/router"和您的Loading组件。

import { useState, useEffect } from "react";import { useRouter } from "next/router";import Loading from "../components/Loading";

现在我们将loading使用useState钩子声明变量并使用它进行初始化false,我们将true在路由更改时将其设置为,并在路由更改完成后将其恢复为 false。

我们将把这个逻辑放在useEffecthook 中并设置router为它的依赖项。这意味着每次router更改useEffect钩子内的逻辑都会被执行。

function MyApp({ Component, pageProps }) {const router = useRouter();const [loading, setLoading] = useState(false);useEffect(() => {const handleStart = (url) => {  url !== router.pathname ? setLoading(true) : setLoading(false);};const handleComplete = (url) => setLoading(false);router.events.on("routeChangeStart", handleStart);router.events.on("routeChangeComplete", handleComplete);router.events.on("routeChangeError", handleComplete);  }, [router]);  return (<>                    );}export default MyApp;}

我们将通过loading变量为道具,以我们的Loading组件,以便随时loading为true Loading组件将已经class有display: block当它是false将有class有display: none。

感谢你能够认真阅读完这篇文章,希望小编分享的"怎么在Next.js项目中制作自定义加载屏幕"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

组件 屏幕 路由 事件 篇文章 制作 路由器 项目 变量 更多 样式 逻辑 钩子 支持 不同 成功 为此 价值 信息 兴趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技名片 华服互联网科技靠谱吗 互联网科技公司电话 互联网女皇 腾讯科技 四川狮子座互联网科技 云创客互联网科技公司 深圳国际航运科技和互联网 须眉科技是互联网公司吗 中国科技互联网公司收入 中国互联网有什么科技含量 崇明区互联网教育科技诚信经营 湖南一路畅行互联网科技 互联网科技和信息 城市宝互联网科技有限公司 互联网科技资金流入 本届互联网大会上的黑科技 易租星互联网科技有限公司 互联网科技职业技能培训学校 众联互联网络科技 杭州科技互联网公司有哪些 以房互联网科技 菲比寻常互联网科技 顺网科技2021年互联网排名 中化能源互联网科技招聘 荆州市昕露互联网络科技有限公司 广西互联网科技孵化中心 互联网行业科技股 锡山区互联网智能科技产品供应 下一代互联网重大应用科技园 恒生科技指数 中概互联网
0