2015-03-22 39 views
6

html'nin bir bölümünü güncellemek için setState'i kullanıyorum ancak yeni güncelleme html'sinin oluşturulmadığını buldum.html durum dizgisinde render

html:

<div>hello<br />world<br /></div> 
<div id='content'></div> 

js: İşte kod, js fiddle olduğunu

var Main = React.createClass({ 
    getInitialState: function() { 
     return {output: 'hello<br />world<br />'}; 
     }, 
    render: function() { 
     return (
      <div>   
       {this.state.output} 
      </div> 
     ); 
     } 
}); 

React.renderComponent(<Main/>, document.getElementById('content')); 

ben sunucudan parçayı o güncelleme html ihmal ancak sonuç aynıdır. Durumdaki dize nasıl işlenir?

cevap

19

kullanın dangerouslySetInnerHTML bir dize olarak HTML enjekte etmek Tepki (ama sanal DOM var reaksiyon göster not Bu işaretlemeyi kullanmak mümkün olmayacaktır):

<div dangerouslySetInnerHTML={{__html: this.state.output}} /> 

http://jsfiddle.net/5Y8r4/11/

yapacak API Bu kasıtlı olarak karmaşıktır, çünkü bu rutin olarak güvenli değildir. Tepki, dangerouslySetInnerHTML kullanarak XSS'e karşı korumalara sahiptir ve bu verileri dezenfekte etmemeniz durumunda sizi riske atar.

+0

Bu işe yarıyor. Teşekkürler. Bir soru daha, bu yaygın bir uygulama mı yoksa en iyi uygulama mı? – qqibrow

+3

HTML'nin saklanması yaygın değildir, ancak bazen gereklidir (ör. Sunucuda kullanıcı verilerinden güvenli bir HTML oluşturuyorsunuz, örneğin yığın taşmasıyla ilgili bir yorum yapıyorsunuz ve bunu oluşturmalısınız). –

+3

Bu html'yi dezenfekte etmenin en iyi yolu ne olurdu? – RobSeg

İlgili konular