2016-04-18 2 views
0

Ich habe einige Routen für react-router definiert. Ich würde alle anderen Routen normalerweise so durch den Server laufen lassen, als ob es keine react-router vorhanden wäre.Kann ich den reac-Router nur auf einige URLs beschränken und den Rest der URLs normalerweise an den Server weiterleiten?

Wenn ich nur diese Routen nicht gebe, erhalte ich eine Warnung, wenn die Seite lädt: "Warnung: [react-router] Location"/Dienste "nicht mit Routen" aber ich könnte dies leiden.

Was kann ich nicht leiden ist, dass, wenn ich auf url abgedeckt durch reagieren-Router und klicken Sie auf Zurück-Taste, um ungedeckte URL zu gehen, dann funktioniert es nicht. Ich sehe diesen Fehler nur noch einmal und der Server wird nicht erneut nach einer unbekannten URL gefragt.

Jede Idee, wie Seite machen nur teilweise durch den Router reagieren abgedeckt?

+1

Sind Sie mit 'reagieren-router' des' Link' für den Link, deren URLs, die Sie an den Server übergeben möchten? Wenn ja, könnte dies die Ursache Ihres Problems sein. Versuchen Sie, normale 'a'-Tags für diese Links/URLs zu verwenden, und es sollte normal funktionieren. Wenn Sie etwas Code posten, wäre das sehr hilfreich. –

+0

@IoannisTziligkakis Ich verwende normale 'a' Tags und das Verhalten, das ich beobachte, ist nichts falsches. Mein Fall ist einfach nicht standardmäßig abgedeckt. Standardmäßig nimmt der react-router an, dass er alle Routen für die Site abdecken soll. Ich brauche es nur für einen etwas anderen Anwendungsfall, in dem nur einige URLs von 'react-router' geroutet werden und andere serverseitig geroutet werden. –

+0

Können Sie einen Code oder die Konfiguration Ihrer Routen posten? Es könnte mit Routern zu tun haben, die sich zwischen dem Client und dem Server überlappen, z. Wenn Sie die Route frühzeitig auf dem Server "fangen" und eine Ansicht rendern, verhält es sich dann genauso? –

Antwort

0

Eine Möglichkeit, dies zu tun ist, manuell react-router verwenden, wie Sie auf Server-Seite haben würden.

# this is CoffeScript (cjsx) 

window.router = 
    <Router history={browserHistory}> 
    <Route name="ServiceNotes" path="ServiceNotes/:location_id" component="ServiceNote" /> 
    </Router> 

$(document).ready -> 
    routes = createRoutes window.router.props.children 

    initialLoad = true 
    browserHistory.listen (location) -> 
    match { routes, location: location.pathname }, (error, redirectLocation, renderProps) -> 
     if !error && renderProps 
     render <RouterContext {...renderProps} />, document.getElementById('page-container') 
     else 
     console.log "Server side navigation" 
     if !initialLoad 
      window.location.reload() 
    initialLoad = false 
  1. zur Geschichte anhören.
  2. Spiel Routen.
  3. Wenn Routen übereinstimmen, rendern Sie wie auf der Serverseite.
  4. Wenn keine Routen übereinstimmen, bei der ersten Geschichte Ereignis nichts tun (wir hier gerade kam), aber auf spätere Ereignisse aktuelle URL vom Server nachladen (Geschichte verhindert Server rufen nach Button oder Link auf der Seite zurück, aber wir müssen es gehen durch, weil es unerreichte Route ist, so tun wir es manuell).
Verwandte Themen