2016-04-08 15 views
1

React server rendering işlevini kullandığım basit bir uygulama kurmaya çalışıyorum.Reaktif sunucu oluşturma, HTML'yi tarayıcıya alma

React 0.14.8, Express 4.13.4.

const React = require('react'); 
const ReactDOMServer = require('react-dom/server'); 
const express = require('express'); 
const exphbs = require('express-handlebars'); 

const myApp = React.createFactory(require('./app/components/app.jsx')); 

// ...express/handlebars setup stuff here 

app.get('/', function(req, res) { 
    const html = ReactDOMServer.renderToString(myApp()); 
    res.render('home', { content: html }); 
}); 

Benim html değişken, ancak kaçtı işaretlemesini içeren ve tarayıcı HTML gösterilmektedir.

dangerouslySetInnerHTML()'u biliyorum, ancak bunu kullanmak zorunda kalmak istemiyorum. Bir sebepten dolayı adlandırılmış.

Burada kaybolduğum bir şeyin olması gerektiğini düşünmekten vazgeçtim. Sunucu sunumu React'ın büyük bir özelliği olduğundan ve dangerouslySetInnerHTML() cesaret kırıldığından, ikisi birlikte kullanılmaları gerektiğini hissetmiyor.

Neler eksik?

Birisi React server rendering'in gerçekten basit, çıplak kemikleri örneğini sağlayabilir mi ..?

+0

myApp uygulamanızın html olarak ne ifade ettiğini paylaşabilir misiniz? Bu da cevaba yardımcı olabilir. –

cevap

1

Sanırım kafam karışmıştı (bu oluyor) ... renderToString()'dan dönen HTML aslında tamam, HTML'den kaçan gidonlardı.

Kulp şablonum dosyasında, http://handlebarsjs.com/ (HTML Kaçışları) adlı belgeye göre'u {{{content}}} olarak değiştirdim.

Tarayıcı, HTML'yi HTML yerine HTML olarak görüntülemektedir.

ReactDOMServer.renderToString() yöntemine bir özür borçlu olduğumu hissediyorum.

Üzgünüm!

1

Haklısınız, innerHtml'u enjekte etmenin tek yolu, ne yazık ki, dangerouslySetInnerHTML() işlevini korkunç şekilde kullanıyor. Temelde bunu yapmadan önce gerçekten düşünmeni istiyor. Burada güzel bir örnek yazılmıştır: https://camjackson.net/post/server-side-rendering-with-react

+0

Teşekkürler Frederick ... Sanırım bununla kafam karıştı, bir cevap yazacağım ... –

+0

Her seferinde, cevabı da eklediğiniz için teşekkürler. Tipik olarak, facebook dokümantasyonundaki örneğe göre templasyon motorları ile gerçekleşir. upvotes takdir edilir;) –