在Next.js中显示页面正在加载的指示器的一般方法?

7qhs6swi  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(291)

有时在Next.js中,加载页面需要一段时间,并且在触发<Link />单击或router.push更改后,没有任何迹象表明页面正在更改。
例如,假设我在一个词典网站上查看单词定义。然后我单击find all words starting with "a",它会加载一个以“a”开头的1000个单词的页面。加载和呈现该页面可能需要2或3秒,但在此期间,没有任何迹象表明该页面正在“转换”。
在这种情况下,你应该如何连接某种指标?推荐的方法是什么?

km0tfn4u

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;

相关问题