2014-10-03 33 views
7

ReactJS & düğümünü kullanarak sunucu tarafı oluşturmayı denerken aşağıdaki hatayı almaya devam ediyorum.ReactJS Geçersiz sağlama toplamı

React attempted to use reuse markup in a container but the checksum was invalid. 

Ben sunucu ve istemci üzerinde aynı sahne geçen bu sorunu gideren bir answer gördüm. Örneğimde, hiç oyuncum yok, bu yüzden sorunun cevabım için geçerli olduğundan emin değilim.

Sen benim github hesapta benim tam örneğini görebilirsiniz.

Aşağıdaki önemli kodu ekliyorum. Herhangi bir anlayış büyük beğeni topluyor.

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; 
} 

Sunucu

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); 

cevap

13

Değişim

React.renderComponent(<index/>, document.documentElement); 

için
React.renderComponent(<index/>, document); 

ve bildirim kaybolur.

Screenshot

+0

Bazen, bu çok basit bir şey. Teşekkür ederim. Cevabı bu kadar çabuk nasıl anladın? – Nael

+5

Bir önsezim vardı, onunla oynadım. :) Arka planda, 'document.documentElement' * * HTML öğesidir ve 'document' * öğesi * içerir ve React elemanlara işlenir — böylece html' etiketini oluşturmak isterseniz, bir kap. –

+0

Harika yanıt. Tekrar teşekkürler! – Nael