Reactjs SSR组件的NextJS动态导入
查看可以在NextJS中导入react组件的方式: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=动态( ()=>导入('..
从“/Component”导入组件;
[...]
返回(
)
从“下一个/动态”导入动态
常量DynamicComponent=动态(()=>
导入('../components/hello')。然后((mod)=>mod.hello)
)
[...]
返回(
)
从“下一个/动态”导入动态
常量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 />
)