有时在Next.js中,加载页面需要一段时间,并且在触发<Link />单击或router.push更改后,没有任何迹象表明页面正在更改。例如,假设我在一个词典网站上查看单词定义。然后我单击find all words starting with "a",它会加载一个以“a”开头的1000个单词的页面。加载和呈现该页面可能需要2或3秒,但在此期间,没有任何迹象表明该页面正在“转换”。在这种情况下,你应该如何连接某种指标?推荐的方法是什么?
<Link />
router.push
find all words starting with "a"
km0tfn4u1#
不确定推荐的方法,但在页面加载期间添加加载指示器的一种方法是使用Next.js内置路由器。你可以监听它的routeChangeStart和routeChangeComplete事件来显示和隐藏加载指示器。我是这样实现的:
import { useState, useEffect } from "react"; import Router from "next/router"; const LoadingWidget = () => { const [loading, setLoading] = useState(false); useEffect(() => { const handleRouteChangeStart = () => setLoading(true); const handleRouteChangeComplete = () => setLoading(false); Router.events.on("routeChangeStart", handleRouteChangeStart); Router.events.on("routeChangeComplete", handleRouteChangeComplete); return () => { Router.events.off("routeChangeStart", handleRouteChangeStart); Router.events.off("routeChangeComplete", handleRouteChangeComplete); }; }, []); return loading ? <div>Loading...</div> : null; }; export default LoadingWidget;
然后,您可以导入并呈现_app.js文件中的LoadingWidget组件或 Package 整个应用程序的任何其他组件。
import LoadingWidget from "../components/LoadingWidget"; function MyApp({ Component, pageProps }) { return ( <> <LoadingWidget /> <Component {...pageProps} /> </> ); } export default MyApp;
1条答案
按热度按时间km0tfn4u1#
不确定推荐的方法,但在页面加载期间添加加载指示器的一种方法是使用Next.js内置路由器。
你可以监听它的routeChangeStart和routeChangeComplete事件来显示和隐藏加载指示器。我是这样实现的:
然后,您可以导入并呈现_app.js文件中的LoadingWidget组件或 Package 整个应用程序的任何其他组件。