2017-12-17 4 views
0

Ich habe die nächsten Strecken auf Hauptkomponente meiner App:Reagieren Router den gleichen Code in jeder Route Komponente nennen

<div> 
    <h1><Link to="/">Home</Link></h1> 

    <Switch> 
     <Route exact path="/" component={FirstPage} /> 
     <Route exact path="/:language?/second" component={SecondPage} /> 
     <Route exact path="/:language?/account" component={AccountPage} /> 
     <Route exact path="/:language?/add" component={AddNewPage} /> 
     <Route component={NoMatch} /> 
    </Switch> 
    </div> 

ich in jedem Kind Komponente Überprüfung hinzufügen müssen this.props.match.params.language (Dies ist Reagieren Router Requisiten), um die aktuelle Sprache einzustellen. Aber weiß dieser Code in jeder KomponenteWiilMount sieht verdrahtet in meinen Gedanken. Auch ich setze diese Überprüfung in eine einzelne Funktion und werde sie jedes componentWiilMount nennen und prop.mps.parts.language propails dazu übergeben, jedenfalls ist es ein Durcheinander von Code. Zum Beispiel, wenn ich 100 Routen habe, muss ich diese Überprüfung 100 Mal hinzufügen. Ich denke darüber hinaus diesen Code zu Hauptkomponentenlebenszyklus hinzufügen, und es wird aufgerufen, wenn Seite geändert wird, aber ich habe keine Reagieren Router Requisiten hier. Vielleicht wissen Sie bessere Lösung dafür?

Antwort

1

Sie können versuchen, Ihre Routen zu verschachteln. Sie könnten eine übergeordnete Routenkomponente haben, die die Sprache verwaltet, und anschließend untergeordnete Routenkomponenten verschachteln:

+0

Jacob, danke für die Antwort. Ich habe diesen Ansatz versucht, aber in diesem Fall componentDidMount von LanguageSelector wird nur für LanguageSelector-Komponente aufgerufen. Wenn ich direkt untergeordnete Route öffnen, zum Beispiel (/ add) componentDidMout von "LanguageSelector" nicht aufgerufen. – Kholiavko

+0

Was ich vorschlage, ist, dass Sie 'LanguageSelector' immer installiert haben. – Jacob

+0

Ja, mein Schlechter, ich habe morgen einen Fehler gemacht. Jetzt versuche ich es nochmal, und es funktioniert. [Hier ist eine Demo] (https://codepen.io/pshrmn/pen/YZXZqM?editors=1010). Danke für Ihre Hilfe! – Kholiavko

Verwandte Themen