如何在 Gatsby 中使用 React.lazy

Posted

技术标签:

【中文标题】如何在 Gatsby 中使用 React.lazy【英文标题】:How to use React.lazy in Gatsby 【发布时间】:2020-11-13 22:19:35 【问题描述】:

在 Gatsby 中使用 React.lazy 时,在制作 production(gatsby build) 时会出错,在 Gatsby 项目中使用 React.lazysuspense 的最佳方法是什么

【问题讨论】:

【参考方案1】:

React.lazy 和 Suspense 还没有准备好进行服务器端渲染,但仍然可以通过检查代码是否仅在客户端上执行来使用它们。尽管此解决方案不如可加载组件,后者在服务器端和客户端都有效,但它仍然提供了处理仅客户端包的替代方案,而无需添加依赖项。请记住,如果在没有 iss-s-r 保护的情况下执行以下代码,则可能会中断。

import React from "react"
const ClientSideOnlyLazy = React.lazy(() =>
  import("../components/ClientSideOnly")
)
const MyPage = () => 
  const iss-s-r = typeof window === "undefined"
  return (
    <>
      !iss-s-r && (
        <React.Suspense fallback=<div />>
          <ClientSideOnlyLazy />
        </React.Suspense>
      )
    </>
  )

如果以上方法不适合您,请尝试关注this guide on gatsbyjs.com

【讨论】:

关于为什么 laze-Suspense 在运行“gatsby develop”但“gatsby build”失败时工作的任何建议?它有什么不同? @sale108 Gatsby 默认不在开发模式下运行 s-s-r。这导致一些用户在部署 gatsby 应用时发现由于 s-s-r 存在仅生产问题。但是,您可以运行 s-s-r 模式,将 DEV_s-s-r 标志添加到您的 gatsby-config.jsmodule.exports = flags: DEV_s-s-r: true , plugins: [...] 在 Gatsby 讨论中了解更多信息:github.com/gatsbyjs/gatsby/discussions/28138

以上是关于如何在 Gatsby 中使用 React.lazy的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Typescript 中正确使用 React.lazy() 来导入带有泛型类型参数的反应组件?

如何使用React.lazy和Suspense进行组件延迟加载

React中异步模块api React.lazy和React.Suspense

React.lazy和Suspense组合实现组件懒加载

使用 React Suspense 和 React.lazy 子组件进行 Jest/Enzyme 类组件测试

使用 React.lazy 时未捕获的未定义错误