javascript - Next.js:如何将外部仅客户端 React 组件动态导入到开发的服务器端渲染应用程序中?

标签 javascript reactjs webpack server-side-rendering next.js

我知道这个问题之前已被问过多次,但似乎没有一个解决方案有效。

我正在尝试使用库“react-chat-popup”,它仅在 SSR 应用程序的客户端上呈现。(使用 next.js 框架构建)使用该库的正常方法是调用 import {Chat} from 'react-chat-popup'然后直接渲染为<Chat/>

我为 SSR 应用程序找到的解决方案是检查是否 typedef of window !=== 'undefined'componentDidMount动态导入库之前的方法,因为通常单独导入库就已经导致 window is not defined错误。所以我找到了链接https://github.com/zeit/next.js/issues/2940建议如下:

Chat = dynamic(import('react-chat-popup').then(m => {
  const {Foo} = m;
  Foo.__webpackChunkName = m.__webpackChunkName;
  return Foo;
}));

但是,当我这样做时,我的 foo 对象变为 null。当我在回调中打印出 m 对象时,我得到 {"__webpackChunkName":"react_chat_popup_6445a148970fe64a2d707d15c41abb03"}如何正确导入库并开始使用<Chat/>在这种情况下的元素?

最佳答案

Next js 现在有自己的方式来进行动态导入,无需 SSR。

import dynamic from 'next/dynamic'

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

这是他们的文档的链接:next js

关于javascript - Next.js:如何将外部仅客户端 React 组件动态导入到开发的服务器端渲染应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51762656/

相关文章:

javascript - 在渲染 ReactJS 组件之前,如何确保数据已通过 AJAX 加载?

javascript - 使用高阶 reducers 去除重复的 redux Action 逻辑

javascript - 在应用程序中包含 Polyfill 包

javascript - 如何在 JavaScript 中缩小常量值?

javascript - 如何使用 jQuery 中的类获取 ID?

javascript - 如何在 Node.js 中的每个 API 调用之间进行延迟

javascript - 脚本标记中的 Google Analytics 脚本或脚本链接

reactjs - Apollo 客户端注销后重置商店

javascript - Tailwind CSS 不能用 React 和 Express 编译?

javascript - 网页包 4 : How to extract CSS from Node module?