2014-12-14 27 views
15

Sto imparando come usare React e, finora, mi sto divertendo molto. Tuttavia, sto incontrando un po 'di problemi.Utilizzo di HTML statico con React

Come pratica con React, sto cercando di creare un menu di navigazione che mostri contenuti diversi in base all'elemento o al tab attivo. Questi diversi punti di vista, per i miei scopi, saranno di natura statica, principalmente informativa con forse qualche audio o video incorporato. Ma ci può essere un sacco di contenuti in ogni vista. Per me, ha più senso creare file HTML separati e utilizzare i loro contenuti in queste diverse visualizzazioni. Tuttavia, l'unico modo che posso vedere per farlo senza l'uso di una libreria esterna consiste nel mettere il contenuto statico per ogni vista nel proprio componente React che non fa altro che rendere quel contenuto statico.

Mi sembra stupido. C'è un modo per realizzare ciò che sto cercando di fare in React? In caso contrario, c'è una libreria leggera o ampiamente utilizzata che mi permetterà di realizzare questo? Grazie in anticipo!

+0

Si potrebbe semplicemente utilizzare la funzione di caricamento di jQuery se si considera jQuery leggero ... Questa funzione consente di caricare HTML esterno e iniettarlo nella pagina. – Becojo

+0

A meno che non mi sbagli, la funzione di caricamento di jQuery utilizza AJAX per recuperare l'HTML in questione, giusto? Una soluzione piuttosto buona, ma sarebbe ancora meglio se potessi comporlo in loco senza più traffico web coinvolto. Sembra che potrebbe essere necessario un passo di costruzione che coinvolge una sorta di stringhe HTML che vengono create e inviate con gli script. – SethGunnells

+0

Sembra che ci possano essere alcuni plug-in gulp per fare ciò che voglio, ma sono a malapena usati e mi chiedo sempre se nessuno sta affrontando lo stesso problema di me o se lo faccio nel modo sbagliato. – SethGunnells

risposta

2

Se si desidera caricare tutto il codice HTML in fase di caricamento della pagina, è necessario creare dinamicamente uno script nel vostro processo di generazione o il server:

var PAGE_HTML={"page1.html": "...","page2.html":"..."}; 

Si può fare questo in nodo per una directory in questo modo:

var readAll = require('read-dir-files').read; 
readAll('./pages', 'utf-8', false, function(err, files){ 
    if (err) return doSomething(err); 

    fs.writeFile('dist/pages.js', "var PAGE_HTML=" + JSON.stringify(files), function(err){ 
     // ... 
    }); 
}); 

In Reagire si può quindi avere una struttura come questa:

var App = React.createClass({ 
    getInitialState: function(){ return {page: "page2.html"} }, 
    navigate: function(toPage){ 
     this.setState({page: toPage}) 
    }, 
    render: function(){ 
     return <div> 
      <ul> 
       <li onClick={this.navigate.bind(null, "page1.html")}>Page 1</li> 
      </ul> 
      <div dangerouslySetInnerHTML={{__html: PAGE_HTML[this.state.page]}} /> 
     </div>; 
    } 
}); 

Nota a margine: non c'è niente di sbagliato nell'avere i componenti di React per il contenuto della pagina, non è il formato migliore per tutti i tipi di contenuti. Se hai bisogno di una pagina in cui avrai molti componenti interattivi, potrebbe avere senso rappresentarla come componente.

+0

Questo è molto simile a quello che mi aspettavo. Sembra che ci siano alcuni plugin gulp in grado di realizzare questo. Potrei provarli. Sembra, tuttavia, che io sia per lo più da solo nel vedere questo come un problema che mi fa sempre chiedere se sia davvero un problema.Immagino che il motivo principale per cui voglio essere in grado di memorizzare il mio contenuto statico nei file HTML sia che gli strumenti che uso non mi danno le stesse comodità in JSX come in HTML. – SethGunnells

1

Recentemente abbiamo avuto un problema simile di provare ad integrare l'HTML statico nella nostra applicazione React (in questo caso l'HTML era un modello con i componenti di React "iniettati", quindi era potenzialmente un po 'più complesso del tuo situazione). Come te, volevamo essere in grado di creare HTML non elaborato (in modo che potesse essere generato da strumenti standard).

Un collega ha creato questa libreria per realizzare il compito:

https://github.com/mikenikles/html-to-react

analizza l'albero HTML, trasformandola in un 'Reagire albero', che è possibile incorporare in un componente reagire. Questo evita l'uso di dangerouslySetInnerHtml e non richiede alcuna pre-elaborazione in fase di elaborazione sul codice HTML.

+0

Come posso utilizzare htm-to-react in un progetto MVC Asp.Net? Ho cercato su internet ma non riesco a trovare una risposta semplice. –

+0

Il modulo è disponibile tramite NPM. Dovresti essere in grado di importarlo nel tuo progetto ASP. Non ho mai lavorato con ASP, quindi non sono in grado di entrare molto più in dettaglio di quello. –

Problemi correlati