ReferenceError: 窗口未在 NextJs 上定义

时间:2021-03-18 17:42:00

标签: reactjs next.js facebook-pixel

尝试从“react-facebook-pixel”导入 ReactPixel;但是当我执行它时抛出一个引用错误,指出窗口未定义。

 module.exports = require("react-facebook-pixel");

是我导入 ReactPixel 时遇到问题的特定代码行。

1 个答案:

答案 0 :(得分:3)

我猜你是在导入 facebook-pixel,就好像它在客户端运行一样,而不是 ssr(即 NextJS)。一旦您的组件在客户端加载,您将需要动态重要:

https://github.com/zsajjad/react-facebook-pixel/issues/53

使用 useEffect:

  React.useEffect(() => {
    import("react-facebook-pixel")
      .then((x) => x.default)
      .then((ReactPixel) => {
        ReactPixel.init(constants.siteMeta.FacebookPixelID);
        ReactPixel.pageView();

        Router.events.on("routeChangeComplete", () => {
          ReactPixel.pageView();
        });
      });
  });

或者 componentDidMount()

export default class App extends NextApp {
  componentDidMount() {
    import('react-facebook-pixel')
      .then((x) => x.default)
      .then((ReactPixel) => {
        ReactPixel.init('your-pixel-id');
        ReactPixel.pageView();

        Router.events.on('routeChangeComplete', () => {
          ReactPixel.pageView();
        });
      });
  }
}