2016-01-12 14 views
9

Tất cả:Cách xuất Cấu phần cho hiển thị bên máy chủ trong React

Tôi khá mới đối với React, hiện tại tôi đang cố gắng làm cách hiển thị phía máy chủ, tôi sử dụng Express.js làm máy chủ của mình, vì vậy mã cũng giống như:

//server.js 
var express = require("express"); 

var ReactDOMServer = require("react-dom/server"); 
var MyCom = require("./components"); 
var domstring = ReactDOMServer.renderToString(MyCom); 

var app = express(); 
app.get("/", function(req, res){ 
    res.json({ 
     name: "new com", 
     dom: domstring 
    }); 
}); 

// components.js 
var React = require("react"); 

var MyCom = React.createClass({ 
    render: function(){ 
     return (<h1>Hello, server side react</h1>); 
    } 
}); 

module.exports = MyCom; 

tôi sử dụng babel để transpile các JSX, nhưng khi tôi khởi động máy chủ, tôi không biết tại sao tôi cứ bị lỗi như:

Vi phạm bất biến: renderToString(): Bạn phải vượt qua Phản hồi hợp lệ.

Bất kỳ ai có thể đưa ra một số đầu mối tại sao điều này không hoạt động?

Cảm ơn

Trả lời

6

mô-đun của bạn xuất khẩu một ReactComponent, và renderToString chấp nhận một ReactElement (ví dụ: một instantiated ReactComponent).

Để làm cho nó, bạn muốn nhanh chóng nó như vậy:

ReactDOMServer.renderToString(<MyCom />); 
+0

cảm ơn bạn đã trả lời. Khi tôi trở lại FB API, tôi nhận ra nó cũng cần phải là một yếu tố phong cách JSX. – Kuan

+1

Bạn cũng có thể làm một cái gì đó như: 'reactDOM.renderToString (react.createFactory (componentFile)(), {});' Và nó sẽ hoạt động khi thành phần của bạn sống trong một tệp jsx riêng biệt – danielrvt

2

Sử dụng một nhà máy cho phép bạn có tất cả các thành phần của bạn trong tập tin riêng biệt và nhanh chóng chúng mà không sử dụng jsx cú pháp trong máy chủ của bạn. Rất hữu ích cho các thành phần wrapper chính.

require('babel-core/register')({ 
    presets: ['react'] 
}); 

var express = require('express'); 
var reactDOM = require('react-dom/server'); 
var react = require('react'); 
var app = express(); 

app.get('/', function (req, res) { 
    var mainFile = require('./app.jsx'); 
    var output = reactDOM.renderToString(react.createFactory(mainFile)({ 
    data: yourInitialData 
    })); 
    res.send(output); 
}); 
Các vấn đề liên quan