2017-03-21 5 views
30

Dies ist ein allgemeiner Zweck, unmatch Anfrage auf nicht gefundene Seite verweisen.Reagieren Router v4 Standardseite (nicht gefundene Seite)

machen dies mit react-router v4 sieht aus wie frühere Versionen und ich erwarte, dass Beispiel funktioniert unten. Links funktionieren gut, aber ich erwarte NotFound-Komponente namens nur unbekannte URL angefordert; aber es ist immer da.

import { 
    BrowserRouter as Router, 
    Route, 
    Link 
} from 'react-router-dom' 


class Layout extends Component { 
    render() { 
    return (
    <Router> 
     <div className="App"> 
     <ul> 
      <li><Link to="/">Home</Link></li> 
      <li><Link to="/user">User</Link></li> 
     </ul> 
     <Route exact path="/" component={Home}/> 
     <Route path="/user" component={User}/> 
     <Route path="*" component={Notfound}/> 
     </div> 
    </Router> 
    ); 
    } 
} 

enter image description here enter image description here

seine seit path="*" repräsentieren alle Anfragen und notfound Komponente gibt es immer, aber wie kann ich sagen, verstecken diese Komponente für gültige URL-Pfad?

Antwort

67

React Router No Match documentation deckt dies ab. Sie müssen die <Switch> Komponente importieren, dann können Sie das path Attribut insgesamt entfernen.

Ein <Switch> rendert das erste Kind <Route>, das übereinstimmt. Ein <Route> ohne Pfad passt immer

Dies ist das Beispiel, das verwendet:

<Router> 
    <div> 
    <Switch> 
     <Route path="/" exact component={Home}/> 
     <Redirect from="/old-match" to="/will-match"/> 
     <Route path="/will-match" component={WillMatch}/> 
     <Route component={NoMatch}/> 
    </Switch> 
    </div> 
</Router> 

Also in Ihrem Fall Sie einfach die path="*" fallen würde und die Einführung der <Switch>:

<Switch> 
    <Route exact path="/" component={Home}/> 
    <Route path="/user" component={User}/> 
    <Route component={Notfound} /> 
</Switch> 

Denken Sie daran, Switch zu Ihrer import Anweisung am Anfang aufzunehmen.

+2

funktioniert perfekt Dank! – TyForHelpDude

+1

Arbeitete für mich! Vielen Dank! – user124704

+0

Funktioniert wie Charme, thx! Ich habe gerade einen tollen und nützlichen Beitrag nur für Append mehr über Reagieren-Routen gefunden v4 - https://medium.com/vshrmn/a-simple-react-router-v4-tutorial-7f23ff27adf –

0

Es ist für mich nicht, arbeiten vor allem ist man mit diesem config

Also, ich habe den Pfad in der Render-Funktion Homepage Komponente zu überprüfen. Etwas wie folgt aus:

render(){ 
 
const {match, location, history} = this.props; 
 
if (location.pathname === '/'){ 
 
return (<div>Home</div>) 
 
}else{ 
 
return null 
 
} 
 
}

+1

OP fragt nach einer Route, die ist nicht gefunden oder möglich eine fehlerhafte URL, nicht die Root-URL. – jakeed1

Verwandte Themen