2017-02-03 4 views
0

Wie man neue Requisiten übergeben, wenn Route geändert? Ich brauche Wechselklasse abhängig von der Route.Reagieren Router onChange

export class Routes extends React.Component<any, any> { 
constructor(props:any){ 
    super(props); 
} 
handleChange = (prevState, nextState, replaceState) => { 
    console.log(nextState.location.pathname); 
}; 
render(){ 
    return(
     <Router {...this.props}> 
      <Route path="/" onChange={this.handleChange} component={Miramir}> 
       <Route path="/about"> 
        <IndexRoute component={Miramir}></IndexRoute> 
       </Route> 
       <Route path="/contact"> 
        <IndexRoute component={Miramir}></IndexRoute> 
       </Route> 
       <Route path="/profile"> 
        <IndexRoute component={Profile} /> 
        <Route path="/profile/update" component={ProfileUpdate} /> 
        <Route path="/profile/login" component={LogInPage} /> 
       </Route> 
      </Route> 
     </Router> 
    ) 
    } 
} 

Ich versuche Requisiten in meinem Miramir Komponente zu erhalten und location.pathname

Zum Beispiel überprüfen: Auf meinem Weg/i Header-Klasse will home-page und/profile Route wollen profile-page Klasse. Aber wenn ich die Routen ändere location.pathname hat / Route

Wie Update-Requisiten zu überprüfen?

Ich brauche nextState.location.pathname in meiner Miramir Komponente

+1

nicht sicher, ob dies kann Ihnen helfen, browserHistory.listen (location => {// Ist Ihre Sachen hier}); hier basierend auf Pfad können Sie Ihren Code tun –

Antwort

1

Sie onEnter Haken bereitstellen kann, wenn Route verändern wird.

zB

<Route 
    path="/profile/update" 
    component={ProfileUpdate} 
    onEnter={onProfileUpdate} 
/> 

Dann Sie diese Funktion definieren können onProfileUpdate

function onProfileUpdate(nextState, replace, callback) { 

    replace({ 
     pathname: '/transition path name here', 
     state: { nextPathname: nextState.location.pathname } 
    }); 

} 
+0

Gibt es eine Möglichkeit, 'nextState.location.pathname' zu ​​übergeben, wenn es in meine Miramir-Komponente geändert wurde? Ihre Lösung ist nicht was ich brauche :) Vielen Dank für die Hilfe –

+0

@ АндрейГузюк Ja können Sie das in der gleichen Weise übergeben, wie Sie nur den OnEnter-Hook für Index Route verwenden. nextPathname ist im Status Ihrer Komponente verfügbar. – WitVault

0

Wenn Ihre Komponente eine Route Komponente ist, wie es in Ihrem Fall ist, wird es einige Requisiten hinein injiziert bekommen durch der Router selbst. Sie erhalten Ihren aktuellen Standort, Parameter usw., so dass Sie einfach das in Ihrer render Methode lesen und entsprechend handeln können.

https://github.com/ReactTraining/react-router/blob/master/docs/API.md#injected-props

Wenn Sie etwas in einer Komponente zugreifen müssen tiefer in Ihrem Baum leben, könnten Sie es wickeln mit dem withRouter HOC.

https://github.com/ReactTraining/react-router/blob/master/docs/API.md#withroutercomponent-options