如何在React.lazy和Suspense中获得加载进度

Thu*_*San 7 lazy-loading progress-bar reactjs code-splitting

我正在使用惰性来拆分路线,我想知道是否有任何办法可以使惰性和悬念的加载进度。

目前,我正在像这样使用它。

const Home = lazy(() => import("./Home"));
const About = lazy(() => import("./About"));

function App() {
  return (
    <Router>
      <Switch>
        <Suspense fallback={<div>loading</div>}>
          <Route path="/" exact={true} component={Home} />
          <Route path="/About" component={About} />
        </Suspense>
      </Switch>
    </Router>
  );
}
Run Code Online (Sandbox Code Playgroud)

?但我想显示加载进度(例如youtube)。
?我有什么办法可以检索例如下面的示例的进度。

<Suspense fallback={({progress}) => <LoadingBar progress={progress}/>}>
Run Code Online (Sandbox Code Playgroud)

小智 5

这是我的解决方案:

const LazyLoad = () => {
    useEffect(() => {
        NProgress.start();

        return () => {
            NProgress.stop();
        };
    });

    return '';
};

<Suspense fallback={<LazyLoad />}>
Run Code Online (Sandbox Code Playgroud)

  • 在您的答案中添加一些解释总是有帮助的,以使其更加清晰易懂。请阅读 https://stackoverflow.com/help/how-to-answer。 (9认同)

ama*_*ann 3

lazy使用 JavaScript Promise 来解决或拒绝,但它们不报告任何进度。

但是,您可以使用http://ricostacruz.com/nprogress/之类的东西来伪造进度,它会随机增加进度条。