React suspense/lazy delay?

后端 未结 5 1676
醉话见心
醉话见心 2020-12-05 18:13

I am trying to use the new React Lazy and Suspense to create a fallback loading component. This works great, but the fallback is showing only a few ms. Is there a way to add

5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-05 18:34

    lazy function is supposed to return a promise of { default: ... } object which is returned by import() of a module with default export. setTimeout doesn't return a promise and cannot be used like that. While arbitrary promise can:

    const Home = lazy(() => {
      return new Promise(resolve => {
        setTimeout(() => resolve(import("./home")), 300);
      });
    });
    

    If an objective is to provide minimum delay, this isn't a good choice because this will result in additional delay.

    A minimum delay would be:

    const Home = lazy(() => {
      return Promise.all([
        import("./home"),
        new Promise(resolve => setTimeout(resolve, 300))
      ])
      .then(([moduleExports]) => moduleExports);
    });
    

提交回复
热议问题