2015-01-22 9 views
8

Sto cercando di capire il modo migliore per passare i dati attraverso i miei percorsi. So che posso usare i parametri ma ci sono alcuni tipi di dati che non appartengono ai param.React-router: passaggio dei dati attraverso i percorsi

Ad esempio: Ho una pagina indice che mostra un elenco di applicazioni. Ogni applicazione ha accanto un pulsante che ti indirizza alla vista per quella applicazione.

Voglio passare l'applicazione stessa al gestore dell'applicazione. Tuttavia, non ha senso passare l'intera applicazione tramite parametri. Sebbene abbia senso passare l'identificativo dell'applicazione a params (es: id o: name)

Quindi il modo in cui penso che dovrei fare questo è passare l'identificativo dell'applicazione a params, quindi nel componente Application cerca il mio ApplicationStore per l'applicazione appropriata dato l'identificatore.

Tuttavia, non sarebbe più semplice e rapido passare l'applicazione stessa? C'è un modo per fare questo. C'è una ragione per non farlo?

Ecco il codice:

<Link to="showApplication" params={{name: application.name}}>View</Link>

o

<Link to="showApplication" params={{application: application}}>View</Link>

Grazie in anticipo!

+1

come lo hai risolto? Penso che la prima risposta non sia quello che vuoi. – Robin

+1

Ho la stessa domanda :( – Robin

risposta

5

Il problema è che quando la persona si aggiorna, o in qualche altro modo carica direttamente l'url, deve mostrare la vista corretta. Poiché gli URL sono solo stringhe, devi rappresentare il percorso come una stringa. Non è possibile (facilmente) inserire un'applicazione reale nell'URL.

Il lavoro di un router è quello di prendere quella stringa (l'URL) e mapparla al codice effettivo (il gestore) e fornire tutti i dati aggiuntivi (i parametri, la query e/o l'hash).

Il tuo lavoro come utente router è di garantire che ci siano abbastanza informazioni nell'URL affinché il router possa scegliere il gestore destro e che il gestore abbia abbastanza informazioni per svolgere il proprio lavoro (ad esempio quale applicazione mostrare).

Se l'url è qualcosa come mysite.com/showApplication, chiaramente non ci sono abbastanza informazioni.

Se si tratta di qualcosa di simile a:

mysite.com/showApplication/React.createClass(%7Brender%3A%20function()%7Breturn%20React.createElement('div'%2C%20null%2C%20%22I'm%20an%20application!%22%7D%7D)%3B 

vale a dire mettere un'applicazione nell'URL, che è troppe informazioni, e in generale una pessima idea.

Ma mysite.com/showApplication/applicationName è solo :-) destra

+0

Ehm hai dimenticato un vero caso d'uso per questo, nel mio caso io generi un oggetto da un mucchio di richieste Ajax, mando alcune delle informazioni tramite i parametri incluso un id per un percorso diverso, Posso rigenerare l'intero oggetto tramite l'id, nessun problema, ma se potessi inviare l'oggetto risparmierò la larghezza di banda, se l'oggetto non è definito, verrà rigenerato dall'ID, un caso d'uso effettivo. – Onza

-1

sarò fornire un modo semplice e hacky, avere un oggetto globale che si utilizza per condividere informazioni attraverso percorsi ad es.

window.CONTEXT = {'share':'this'} 

Nota che è molto importante utilizzare solo in questo modo se l'oggetto che si desidera condividere può essere ricreato per via stessa, come FakeRain detto sopra il percorso deve contenere solo informazioni sufficienti per poter dare all'utente la stessa esperienza se ricaricano.

L'unico motivo per cui lo si utilizza è di risparmiare larghezza di banda se è necessario richiedere informazioni per ciò che si desidera condividere ma non si desidera un collegamento enorme.