reactjs - 在 Nextjs 中创建新门户时未定义文档

标签 reactjs next.js

在我的项目中,我想在标题标签中分隔部分,例如标题标签中的菜单、主标签中的内容和页脚标签中的联系人 _document.js 文件,为此我创建了一个新门户,但出现错误文档未在我的 Header.js 文件中定义

我尝试像这样在 nextjs 中创建新门户:

import React, { Fragment } from "react";
import ReactDOM from "react-dom";

import NavigationBar from "./NavigationBar";

import classes from "./header.module.css";

const Header = (props) => {
  return (
    <Fragment>
      {ReactDOM.createPortal(
        <NavigationBar>{props.children}</NavigationBar>,
        document.getElementById("header")
      )}
    </Fragment>
  );
};

export default Header;

我创建了 _document.js:

import Document, { Html, Head, Main, NextScript } from "next/document";

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx);
    return { ...initialProps };
  }

  render() {
    return (
      <Html lang="en" dir="ltr">
        <Head />
        <body>
          <header id="header"></header>
          <Main />
          <footer id="_footer"></footer>
          <div id="_modal"></div>
          <NextScript />
        </body>
      </Html>
    );
  }
}

export default MyDocument;

最佳答案

错误被抛出是因为document 只在浏览器内可用,在服务器上不可用。接下来 js 在服务器端执行此代码,这就是抛出错误的原因。

您可以将我们的代码包装在 if 语句中。如果您在控制台上检查它返回对象的窗口类型。以下代码说明了这一点:

if (typeof window === 'object') {
    // Check if document is finally loaded
}

关于reactjs - 在 Nextjs 中创建新门户时未定义文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70259136/

相关文章:

reactjs - 在 React 中动态调用方法

reactjs - 如何在下一个 js 中从节点模块外部的文件夹中导入模块

reactjs - NextJS 中路由器和链接的典型区别

html - 如何消除网页上 iPhone 缺口处的空白

reactjs - 如何使用 Gatsby 以编程方式在 React Helm 中显示图像?

javascript - MUI - 如何以命令式/编程方式打开对话框

javascript - Sass 加载器未加载样式

javascript - 为什么 Dispatcher 在 Flux 上发起不必要的事件?

javascript - 使用 getServerSideProps next :js 部署后发生内部服务器错误 500

javascript - Next.js 路由处理程序出现 404 错误