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

Posted

技术标签:

【中文标题】如何在 React.lazy 和 Suspense 中获取加载进度【英文标题】:How to get loading progress in React.lazy and Suspense 【发布时间】:2019-06-17 17:18:56 【问题描述】:

我正在使用lazy来分割我的路线,我想知道是否有任何方法可以让我在lazy和suspense中获得加载进度。

目前我是这样使用的。

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>
  );


■ 但我想显示加载进度(如 youtube)。 ■ 有什么方法可以检索进度,例如如下所示。

<Suspense fallback=(progress) => <LoadingBar progress=progress/>>

【问题讨论】:

好问题:) 【参考方案1】:

lazy 使用解析或拒绝的 javascript 承诺,但它们不报告任何进展。

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

【讨论】:

【参考方案2】:

这是我的解决方案:

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

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

    return '';
;

<Suspense fallback=<LazyLoad />>

【讨论】:

在您的答案中添加一些解释总是有帮助的,以使其更加清晰易懂。请阅读***.com/help/how-to-answer。

以上是关于如何在 React.lazy 和 Suspense 中获取加载进度的主要内容,如果未能解决你的问题,请参考以下文章

React.lazy和Suspense组合实现组件懒加载

React.lazy和React.Suspense异步加载组件

React中异步模块api React.lazy和React.Suspense

react lazy和suspense

用React.lazy和Suspense优化React代码打包

如何在 Gatsby 中使用 React.lazy