反应+下一个js中未定义位置错误?

use*_*513 2 javascript reactjs next.js

我正在尝试发送一些关于hosted url(部署我的构建的地方)的基本文本。但是我收到了这个错误 ReferenceError: location is not defined here is my code

https://codesandbox.io/s/laughing-mendel-pf54l?file=/pages/index.js

export const getStaticProps = async ({ preview = false, previewData = {} }) => {
  return {
    revalidate: 200,
    props: {
      //req.host
      name: location.hostname == "www.google.com" ? "Hello" : "ccccc"
    }
  };
};
Run Code Online (Sandbox Code Playgroud)

Ism*_*rov 9

你能显示你的进口,因为这可能是你从进口路由器 'next/client'

假设您正在使用基于功能的组件

您需要按如下方式导入路由器:

import {useRouter} from "next/router";
Run Code Online (Sandbox Code Playgroud)

在你的函数体中:

const router = useRouter();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢这帮我解决了。是 IDE 自动导入。 (17认同)

Bli*_*que 1

getStaticProps()在 Node.js 中构建时执行,它没有location全局对象 \xe2\x80\x93Location是浏览器 API 的一部分。此外,由于代码是在构建时执行的,因此 URL 尚不清楚。

\n
    \n
  1. 更改getStaticPropsgetServerSideProps请参阅文档)。这意味着该函数在运行时针对每个请求单独调用。
  2. \n
  3. context传递给 的对象中getServerSideProps,取出 Node.jshttp.IncomingMessage对象
  4. \n
  5. 在此对象上,查找Host标题。
  6. \n
\n
export const getServerSideProps = async ({ req }) => {\n  return {\n    props: {\n      name: req.headers.host === "www.google.com" ? "Hello" : "ccccc"\n    }\n  };\n};\n
Run Code Online (Sandbox Code Playgroud)\n

笔记:

\n
    \n
  • 我也更改=====,因为通常建议使用后者。由于静默类型转换,前者可能会产生一些意外的结果。
  • \n
  • 我也删除了revalidate,因为这不适用于getServerSideProps().
  • \n
\n