【问题标题】:Individual loading animation for each page with Next.js使用 Next.js 为每个页面单独加载动画
【发布时间】:2021-09-23 06:24:45
【问题描述】:

我希望我的每个页面在加载时都有不同的加载动画。我怎样才能做到这一点?

不可能像这样将加载组件放在页面组件上:

//Page component
Page.Loader = SomeLoaderComponent

//_app.tsx
const Loader = Component.Loader || DefaultLoader;

这将不起作用,因为“组件(页面)”尚未加载/渲染。

我也试过用next.js动态导入,这样我就可以根据url导入正确的页面,然后得到正确的loader。我最初的计划是将 Loader 添加到页面组件中,如上面代码的第一行所示。这不起作用,因为我必须给出明确的路径。

const getLoader = (pagePath: string): ComponentType => {
  const Loader = dynamic(() => import(pagePath));
  return Page.Loader;
};

这在 Next.js 文档中有说明:

所以问题是:如何为每页获取自定义加载器?

【问题讨论】:

    标签: javascript reactjs typescript next.js loading


    【解决方案1】:

    你可以使用 Suspense 和 Lazy 来完成你的任务。

    假设你有 ComponentA.js 如下

    const ComponentA = () => {
       return <div>Helloooo</div>
    }
    

    您可以创建另一个组件 WrapperA.js 文件

    import React, { Suspense } from 'react';
    
    const WrapperA = React.lazy(() => import('./ComponentA'));
    
    function WrapperA() {
       return (
         <div>
          <Suspense fallback={<div>Loading...</div>}>
             <ComponentA />
          </Suspense>
        </div>
      );
    }
    

    &lt;div&gt;Loading...&lt;/div&gt; 的位置,您可以拥有任何您喜欢的加载器组件。并根据需要将 WrapperA 导出到您的路线或选项卡。

    【讨论】:

    • 感谢您的回答,但我认为这行不通。我仍然需要根据服务器端加载的页面动态更改加载器。
    • 你的意思是基于当前在后端运行的分页数?
    • 我使用的是 Next.js,所以 det frontend 既是前端又是后端 (SSR)。因此,当页面加载服务器端时,我希望向用户显示不同页面上的不同加载动画。假设我正在加载包含数据网格的 av 页面,然后我希望加载器成为该网格的骨架。我想动态改变加载,因此我需要一种在加载页面之前连接加载和页面的方法。
    猜你喜欢
    • 1970-01-01
    • 2020-07-12
    • 2021-04-16
    • 2020-07-22
    • 2011-11-17
    • 2017-03-05
    • 1970-01-01
    • 2016-04-16
    • 2018-07-16
    相关资源
    最近更新 更多