首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态导入- NextJS

动态导入- NextJS
EN

Stack Overflow用户
提问于 2019-01-01 16:22:39
回答 2查看 12.5K关注 0票数 4

我有一个简单的函数来加载脚本:

代码语言:javascript
复制
const creditCardScript = (
  onReadyCB,
  onErrorCB,
) => {
  let script = document.createElement("script");
  script.type = "text/javascript";
  script.src = process.CREDIT_CARD_SCRIPT;
  document.head.appendChild(script);

  script.onload = function() {
    ...
  };
};

export default creditCardScript;

在迁移到NextJS之前,我使用:import creditCardScript from "./creditCardScript"导入脚本。

正弦NextJS在节点中呈现组件服务器端,需要注意确保任何引用window (特定于浏览器)的代码在componentDidMount之前都不会被调用。

NextJS通过提供动态进口 (反应可加载的包装器)解决了这个问题,它:

  • 只有在需要时才加载组件,
  • 提供仅在客户端(ssr: false)加载组件的选项。

我继续并实现了动态导入:

代码语言:javascript
复制
const creditCardScript = dynamic(import("./creditCardScript"), { ssr: false });

componentDidMount

代码语言:javascript
复制
componentDidMount = () => {
  creditCardScript(
    this.onReadyCB,
    this.onErrorCB
  );
};

但我明白了:Uncaught TypeError: Cannot call a class as a function

我尝试将函数转换为类,并使用构造函数传入args,但我的代码现在默默地失败了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-01 18:38:15

正如尼尔在评论中提到的,我所需要做的就是在componentDidMount中这样做

代码语言:javascript
复制
const { default: creditCardScript } = await import("./creditCardScript"); 

链接到官方教程

票数 5
EN

Stack Overflow用户

发布于 2020-03-05 02:49:39

导出默认仅适用于import from语句,您可以尝试

代码语言:javascript
复制
export creditCardScript;

在进口上,你可以像这样使用

代码语言:javascript
复制
const {creditCardScript} = dynamic(import("./creditCardScript"), { ssr: false });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53997032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档