如何解决 Next.js 中异步组件渲染闪屏问题

阅读时长 4 分钟读完

背景

在使用 Next.js 进行开发时,我们可能会遇到异步组件渲染出现闪屏问题的情况。

所谓异步组件,是指在 Next.js 中使用 dynamic 函数动态加载组件,在页面加载完成后才会加载该组件,以提升页面加载速度的方式。

然而,由于异步组件的加载是异步进行的,当组件还未完全加载完成时,如果组件的样式或其他资源已经加载完成,就会出现闪屏的现象,给用户带来不好的体验。

解决方法

为了解决异步组件闪屏问题,我们有以下几种方法可以尝试。

方法一:使用 next/dynamic 而非 dynamic 函数

在 Next.js 中,我们可以使用 next/dynamic 而非 dynamic 函数来动态加载组件,以避免异步组件渲染出现闪屏问题。

next/dynamic 的使用方式与 dynamic 函数类似,只需将 dynamic 替换成 next/dynamic 即可。

比如,原本的代码:

如果改用 next/dynamic,代码将变为:

使用 next/dynamic 加载组件,会在组件加载完全完成后再渲染组件,从而避免闪屏问题的出现。

方法二:使用 next/head 控制资源加载顺序

我们也可以使用 next/head 标签来控制组件的样式和其他资源的加载顺序,从而避免异步组件渲染出现闪屏问题。

在使用 next/head 的过程中,我们需要将样式和其他资源都放在 <Head> 标签内,以确保这些资源会在组件渲染之前加载完成。

比如,我们可以像下面这样修改代码,把样式和其他资源放在了 <Head> 标签内:

-- -------------------- ---- -------
------ ---- ---- -----------
------ ------- ---- --------------

----- ---- - ---------- -- -----------------------------

------ ------- -------- ------ -
  ------ -
    --
      ------
        ----- ------------- ------------------ ---------- --
        ----- ---------------- ------------------ --
      -------
      ----- --
    ---
  -
-

在这个例子中,我们使用 preload 优化了样式的加载,在组件渲染之前预加载了样式资源,避免了闪屏问题的出现。

方法三:使用 loading 属性控制组件内容的展示

另外,我们还可以使用 loading 属性来控制组件的展示。

loading 属性可以接收一个 React 组件,用于在异步组件加载完成前展示一些占位内容,从而给用户更好的体验。

比如,我们可以像下面这样修改代码,展示一个 Loading 组件:

-- -------------------- ---- -------
------ ------- ---- --------------

----- ---- - ---------- -- ----------------------------- -
  -------- -- -- ----------------------
--

------ ------- -------- ------ -
  ------ -
    ----- --
  -
-

这样,在组件加载完成前,用户会看到一个 Loading... 的提示,等待组件加载完成后再显示组件内容,避免了闪屏问题的出现。

总结

以上就是解决 Next.js 中异步组件渲染闪屏问题的方法。我们可以使用 next/dynamicnext/headloading 属性等方式来避免异步组件渲染出现闪屏问题,给用户更好的体验。

当然,具体使用哪种方法,我们需要根据实际情况来选择。虽然有些方法会带来一定的开发成本,但如果能提升用户体验,也十分值得一试。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6481403748841e98940abb0d

纠错
反馈