【问题标题】:NextJS Dynamic Import of SSR componentNextJS 动态导入 SSR 组件
【发布时间】:2021-05-11 20:26:34
【问题描述】:

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

  1. 普通的旧静态导入:
import Component from './Component';
[...]
return (
  <Component />
)
  1. 动态导入:
import dynamic from 'next/dynamic'

const DynamicComponent = dynamic(() =>
  import('../components/hello').then((mod) => mod.Hello)
)
[...]
return (
  <DynamicComponent />
)
  1. ssr = false 的动态导入:
import dynamic from 'next/dynamic'

const DynamicComponentWithNoSSR = dynamic(
  () => import('../components/hello3'),
  { ssr: false }
)
[...]
return (
  <DynamicComponentWithNoSSR />
)

我的问题很简单:第二个选项何时是首选选项?(在所有三种情况下,假设 SSR 通过存在 getServerSideProps 启用。)

似乎在任何情况下我的组件都是客户端专用的或由用户操作触发的,我想要选项#3。而且似乎无论如何都需要进行 SSR,如果我选择选项 #2,则在 before-hydration 阶段会立即下载块文件,因此它似乎不会为我节省任何时间。它似乎只是添加了一个网络调用。那么我为什么不直接使用选项 #1?

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

【问题讨论】:

    标签: reactjs next.js react-loadable


    【解决方案1】:

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

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

    默认情况下,Next 还预取动态内容,这可能是您最初的混淆之处在于您的代码。加载主要内容,然后预取——在主要内容之后不久自动加载动态内容。

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

    【讨论】:

    • 在这种特殊情况下,内容是服务器端呈现的。我认为我们不会考虑选项 #2。因此,通过getServerSideProps 的存在启用了 SSR。你是说如果启用了 SSR,选项 #2 的块下载将延迟到水合之后?因为那不是我所经历的。
    • 我更新了问题以表明 SSR 已启用。
    猜你喜欢
    • 2022-10-14
    • 2020-11-06
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2018-11-21
    相关资源
    最近更新 更多