ReactJS无效的校验和

Nae*_*ael 7 reactjs

尝试使用ReactJS和节点进行服务器端渲染时,我一直收到以下错误.

React attempted to use reuse markup in a container but the checksum was invalid.
Run Code Online (Sandbox Code Playgroud)

我已经看到一个答案,在服务器和客户端传递相同的道具解决了这个问题.在我的例子中,我没有任何道具,所以我不确定答案是否适用于我的问题.

您可以在我的github帐户上查看我的完整示例.

我在下面列出了重要的代码.非常感谢任何见解.

JSX

/** @jsx React.DOM */
var React = require('react');
var index = React.createClass({
    render: function() {
        return (
          <html>
          <head>
            <script src="bundle.js"></script>
          </head>
          <body>
            <div>
              hello
           </div>
          </body>
         </html>
     );
   }
});

if (typeof window !== "undefined") {
  React.renderComponent(<index/>, document.documentElement);
} else {
  module.exports = index;
}
Run Code Online (Sandbox Code Playgroud)

服务器

require('node-jsx').install();
var express = require('express'),
    app     = express(),
    React = require('react'),
    index = require('./index.jsx');

var render = function(req, res){
  var component = new index();
  var str = React.renderComponentToString(component);
  res.set('Content-Type', 'text/html');
  res.send(str);
  res.end();
}

app.get('/',render);
app.use(express.static(__dirname));

app.listen(8080);
Run Code Online (Sandbox Code Playgroud)

Mic*_*ley 13

更改

React.renderComponent(<index/>, document.documentElement);
Run Code Online (Sandbox Code Playgroud)

React.renderComponent(<index/>, document);
Run Code Online (Sandbox Code Playgroud)

并且通知消失了.

截图

  • 我有预感,所以我玩它.:)事后看来,`document.documentElement`*是*HTML元素,`document`*包含*it,而React呈现为元素 - 所以如果你想渲染`html`标签,你必须渲染到它的容器. (5认同)