Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails &引用;“未定义文档”;网页包+;在轨道上作出反应+;服务器渲染_Ruby On Rails_Reactjs_Webpack - Fatal编程技术网

Ruby on rails &引用;“未定义文档”;网页包+;在轨道上作出反应+;服务器渲染

Ruby on rails &引用;“未定义文档”;网页包+;在轨道上作出反应+;服务器渲染,ruby-on-rails,reactjs,webpack,Ruby On Rails,Reactjs,Webpack,Im使用react_on_rails gem并尝试由服务器渲染组件 当我直接从应用程序中使用组件时,它工作正常 import Hello from "../components/Hello" ReactOnRails.register({ Hello }) 但当我尝试使用软件包时,应用程序会抛出错误 import { Ballon } from "foo-package" import Hello from "../components/Hello" ReactOnRails.regi

Im使用react_on_rails gem并尝试由服务器渲染组件

当我直接从应用程序中使用组件时,它工作正常

import Hello from "../components/Hello"

ReactOnRails.register({
  Hello
})
但当我尝试使用软件包时,应用程序会抛出错误

import { Ballon } from "foo-package"
import Hello from "../components/Hello"

ReactOnRails.register({
  Ballon,
  Hello
})

ERROR in SERVER PRERENDERING
Encountered error: "ReferenceError: document is not defined"

有人知道为什么?

窗口和文档是全局变量,仅在浏览器环境中可用

在服务器上渲染时,您没有该环境。当您在node.js环境中时,您需要保护代码并跳过对这些对象调用任何函数。例如:

if (typeof document !== 'undefined') {
  // Do your document thing here
} else {
  console.log("We're on server")
}

我找到了!“foo包”使用非同构包。它会中断服务器渲染。该软件包是react google chart。

它不起作用的原因是您导入的软件包对服务器渲染不友好。在服务器端,node.js不是全局变量。您可以尝试在Hello组件的
渲染中使用
文档
,或者
组件将挂载
,同样的错误也会发生。