2017-12-17 33 views
0

で同じコードを呼び出す:私はthis.props.match.params.languageをチェックし、それぞれの子要素に追加する必要がは、ルータ反応し、私は私のアプリの主成分の次のルートを持っている各ルート要素

<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> 

を(これは反応ルータの小道具)現在の言語を設定するために。しかし、各コンポーネントWiilMountのこのコードは、私の心の上に配線されているように見えます。でも、私はこのチェックを単一の関数に入れて、それをすべてのcomponentWiilMountと呼び、this.props.match.params.languageの小道具を渡します。とにかくそれはコードの混乱です。たとえば、私が100のルートを持っているなら、私はこのチェックを100回追加する必要があります。 また、このコードをメインコンポーネントのライフサイクルに追加することについて考えています。ページが変更されたときに呼び出されますが、ここには反応ルータのプロップはありません。 これはもっと良い解決策を知っているかもしれませんか?

答えて

1

あなたのルートを入れ子にしてみてください。言語を管理している子供のルートコンポーネントを入れ子にする親ルートコンポーネントを1つ持つことができます。

+0

Jacob、返信ありがとうございます。 私はこのアプローチを試みましたが、この場合componentDidMount、LanguageSelectorからはLanguageSelectorコンポーネントだけが呼び出されます。 例えば、(/ add)のように直接childルートを開くと、 "LanguageSelector"のcomponentDidMoutは呼び出されません。 – Kholiavko

+0

私が提案しているのは、常に 'LanguageSelector'がマウントされていることです。 – Jacob

+0

うん、私の悪い、私は明日ミスを犯した。今度はもう一度試してみてください。 [こちらはデモです](https://codepen.io/pshrmn/pen/YZXZqM?editors=1010) 助けてくれてありがとう! – Kholiavko

関連する問題