Se il file template.html
è solo HTML e non un componente Reagire, allora non si può richiedere che nello stesso modo si farebbe con un file JS.
Tuttavia, se si utilizza Browserify, è disponibile una trasformazione denominata stringify che consente di richiedere file non js come stringhe. Una volta aggiunta la trasformazione, sarà possibile richiedere i file HTML e verranno esportati come se fossero solo stringhe.
Una volta richiesto il file HTML, sarà necessario inserire la stringa HTML nel componente, utilizzando dangerouslySetInnerHTML
prop.
var __html = require('./template.html');
var template = { __html: __html };
React.module.exports = React.createClass({
render: function() {
return(
<div dangerouslySetInnerHTML={template} />
);
}
});
Questo va contro molto di ciò che riguarda React. Sarebbe più naturale creare i tuoi modelli come componenti React con JSX, piuttosto che come normali file HTML.
La sintassi JSX rende banalmente facile esprimere dati strutturati, come HTML, soprattutto quando si utilizza stateless function components.
Se il file template.html
sembrava qualcosa di simile
<div class='foo'>
<h1>Hello</h1>
<p>Some paragraph text</p>
<button>Click</button>
</div>
Poi si potrebbe convertire invece in un file JSX che si presentava così.
module.exports = function(props) {
return (
<div className='foo'>
<h1>Hello</h1>
<p>Some paragraph text</p>
<button>Click</button>
</div>
);
};
Quindi è possibile richiedere e utilizzare senza stringificare.
var Template = require('./template');
module.exports = React.createClass({
render: function() {
var bar = 'baz';
return(
<Template foo={bar}/>
);
}
});
Si mantiene tutta la struttura del file originale, ma sfrutta la flessibilità del modello di Reagire oggetti di scena e consente una compilazione controllo della sintassi di tempo, a differenza di un normale file HTML.
È necessario utilizzare la lettera maiuscola per i componenti personalizzati, quindi rinominare 'template' in' Template' e quindi restituirlo come '' – Icepickle
Suppongo che quando si dice "HTML", si intende realmente JSX? –
@Icepickle ottengo questo errore: errore non rilevato: Impossibile trovare il modulo "./template" –