Reactjs:文档未定义

Mat*_*att 17 javascript reactjs

我有一个非常简单的反应项目设置:

??? app.js
??? components
?   ??? MainWrapper.js
?   ??? html.js
??? package.json
??? server.js
Run Code Online (Sandbox Code Playgroud)

该应用程序启动:

node server.js
Run Code Online (Sandbox Code Playgroud)

它使用快速服务器并在html.js中为HtmlComponent呈现标记:

import React from 'react';
import MainWrapper from './MainWrapper.js'

class HtmlComponent extends React.Component {
    render() {
        return (
            <html>
                <head>
                    <meta charSet="utf-8" />
                    <title>My Awesome Site</title>
                    <meta name="viewport" content="width=device-width, user-scalable=no" />
                    <link rel="stylesheet" href="awesome.css" />
                </head>
                <body>
                    <div id="root"></div>
                </body>
            </html>
        )
    }
}

export default HtmlComponent;
Run Code Online (Sandbox Code Playgroud)

目标是创建一个填充'root'div的Wrapper.现在非常简单:

MainWrapper.js:

import React from 'react';
import ReactDOM from 'react-dom';

var MainWrapper = React.createClass ({
    render: function() {
        return (
            <button>go</button>
        )
    }
});

React.render(<MainWrapper />, document.getElementById("root"));
Run Code Online (Sandbox Code Playgroud)

当我运行节点server.js时,有一个例外:

/Users/me/Desktop/Simple/components/MainWrapper.js:36
_react2['default'].render(_react2['default'].createElement(MainWrapper, null), document.getElementById("root"));
                                                                               ^

ReferenceError: document is not defined
    at Object.<anonymous> (/Users/me/Desktop/Simple/components/MainWrapper.js:27:31)
    at Module._compile (module.js:425:26)
    at normalLoader (/Users/me/Desktop/Simple/node_modules/babel-core/lib/api/register/node.js:199:5)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/me/Desktop/Simple/node_modules/babel-core/lib/api/register/node.js:216:7)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (/Users/me/Desktop/Simple/components/Html.js:5:26)
    at Module._compile (module.js:425:26)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么没有定义文件.这似乎是简单的JavaScript.

dux*_*x-- 36

如果你渲染这个服务器端,就没有"文档"对象.尝试将其包装在以下内容中:

if (typeof window !== 'undefined') {
    React.render(<MainWrapper />, document.getElementById("root"));
}
Run Code Online (Sandbox Code Playgroud)

这将检查窗口对象是否存在 - 意味着它在浏览器中 - 这也意味着文档对象存在


保持这个答案有效

React已被拆分为多个包; react,react-dom,prop-types,可能还有其他,我是不知道的.如果使用更新版本的react,你还需要这个react-dom包来实现这个 - 所以这变成了:

import ReactDOM from 'react-dom';

if (typeof window !== 'undefined') {
    ReactDOM.render(<MainWrapper />, document.getElementById("root"));
}
Run Code Online (Sandbox Code Playgroud)

  • 弄清楚了。我没有使用字符串“undefined”,而只是使用 undefined (2认同)