Reactjs SSR组件的NextJS动态导入

Reactjs SSR组件的NextJS动态导入,reactjs,next.js,react-loadable,Reactjs,Next.js,React Loadable,查看可以在NextJS中导入react组件的方式: 普通旧静态导入: 从“/Component”导入组件; [...] 返回( ) 动态导入: 从“下一个/动态”导入动态 常量DynamicComponent=动态(()=> 导入('../components/hello')。然后((mod)=>mod.hello) ) [...] 返回( ) 使用ssr进行动态导入=错误: 从“下一个/动态”导入动态 常量dynamiccomponent with nossr=动态( ()=>导入('..

查看可以在NextJS中导入react组件的方式:

  • 普通旧静态导入:
  • 从“/Component”导入组件;
    [...]
    返回(
    )
    
  • 动态导入:
  • 从“下一个/动态”导入动态
    常量DynamicComponent=动态(()=>
    导入('../components/hello')。然后((mod)=>mod.hello)
    )
    [...]
    返回(
    )
    
  • 使用ssr进行动态导入=错误:
  • 从“下一个/动态”导入动态
    常量dynamiccomponent with nossr=动态(
    ()=>导入('../components/hello3'),
    {ssr:false}
    )
    [...]
    返回(
    )
    
    我的问题很简单:第二个选项什么时候是首选选项?(在所有三种情况下,假设SSR是通过getServerSideProps启用的。)

    似乎在任何情况下,我的组件都是客户端的,或者是由用户操作触发的,我想要选项3。而且似乎在任何情况下都需要进行SSR'd,如果我选择选项#2,块文件会在水合之前的
    阶段立即下载,所以它似乎不会在任何时候救我。它似乎只是添加了一个网络呼叫。那我为什么不使用选项1呢


    选项2的实际用例是什么?

    最佳选项将取决于内容是服务器端呈现还是客户端呈现。Next中最常见的客户端呈现内容的方式是静态生成

    但是,在下一步中,您还可以在页面中混合使用客户端和服务器端呈现,因此这将取决于在服务器或客户端上执行动态导入的位置

    默认情况下,Next也会预取动态内容,这可能是因为代码中有一点原始的混乱。加载主内容,然后对其进行预取–在主内容之后不久自动加载动态内容


    因此,如果在服务器上进行动态导入,您将启用SSR。启用SSR会禁用服务器上的预取,并确保代码以正确的顺序触发-我不知道它是否会有太多额外的功能。例如,在代码到达客户端之前,它不会导入动态内容。如果您真的想深入了解代码在做什么,下面是。

    在本例中,内容是服务器端呈现的。我不认为我们会考虑选项第2条。因此,通过存在
    getServerSideProps
    ,可以启用SSR。你是说如果启用SSR,选项2的区块下载将延迟到水合作用之后?因为这不是我的经验。我更新了问题,以表明SSR已启用。
    import Component from './Component';
    [...]
    return (
      <Component />
    )
    
    import dynamic from 'next/dynamic'
    
    const DynamicComponent = dynamic(() =>
      import('../components/hello').then((mod) => mod.Hello)
    )
    [...]
    return (
      <DynamicComponent />
    )
    
    import dynamic from 'next/dynamic'
    
    const DynamicComponentWithNoSSR = dynamic(
      () => import('../components/hello3'),
      { ssr: false }
    )
    [...]
    return (
      <DynamicComponentWithNoSSR />
    )