2015-10-21 10 views
10

Ho bisogno di eseguire il rendering di una stringa HTML (JSX) in una classe React. Non so se sia possibile o meno. dangerouslySetInnerHTML non è valido per me perché ho diversi componenti di reazione all'interno di questo file. Non è un semplice HTML.Come eseguire il rendering di una stringa con JSX in React

Ho un esempio con il risultato atteso: https://jsfiddle.net/86rg50re/1/

var MyComponent = React.createClass({ 
    propTypes: { 
     owner: React.PropTypes.string 
    }, 

    render: function() { 
     return <div>Congrats {this.props.owner}! you have rendered MyComponent ({this.props.children})</div>; 
    } 
}); 

var Hello = React.createClass({ 
    render: function() { 
     return <div>Header <MyComponent owner={"Daniel"}>Yayyyyyy!</MyComponent></div>; 
    } 
}); 

ma quello che ho è questo:

var Hello = React.createClass({ 
    render: function() { 
     var content = '<div>Header <MyComponent owner={"Daniel"}>Yayyyyyy!</MyComponent></div>'; 
     return transformStringToJSX(content); 
    } 

Ovviamente transformStringToJSX non esiste.

C'è un modo per eseguire il rendering delle stringhe jsx?

+0

Non si può semplicemente importare il file come file JavaScript e fare riferimento a variabili e componenti da esso come qualsiasi altra importazione? – Bojangles

+0

Suppongo che sia la mia ultima opzione. Preferirei un'altra opzione perché voglio memorizzare solo il contenuto JSX in quel file – gyss

+0

JSX finisce per essere solo JavaScript. Penso che la cosa migliore da fare sia esportare un componente di avvolgimento sottile e importarlo come JS. – Bojangles

risposta

9

È possibile utilizzare babel per trasformarla

npm install --save babel-core 

Poi nel codice

var babel = require('babel-core'); 
var Component = eval(babel.transform('<div><MyComponent /></div>').code); 

Si prega di notare che è generalmente un bad idea per convertire le stringhe di codice eseguibile.

+0

Ciao ahmohl! Non funziona con il pacchetto babel, devi usare 'babel-core'. Ad ogni modo, se uso "Componente" all'interno della mia funzione di rendering, genera un errore. – gyss

+0

Questo è qualcosa di simile a quello che sto cercando di fare. Ma invece di un singolo componente, un'intera stringa contenente JSX: https://github.com/facebook/react/issues/3365 – gyss

+1

Se si utilizza 'eval (babel.transform (yourComponentString) .code);' funziona. Tuttavia, mi raccomando di non fare quello che stai cercando di fare in quanto è una pratica JS scorretta convertire stringhe in codice. – hampusohlsson