2017-11-01 20 views
0

React-Router 4を使用する場合、プログラムによって生成された特定のNavLinkは、一貫してアクティブとしてマークされません。リアクタ - ルータ4 - 共有コンポーネントを含むNavLinkが更新されない

<NavLink to="/">Home</NavLink> 
<NavLink to="/books">Books</NavLink> 
<NavLink to="/poems">Poems</NavLink> 
{['hamlet', 'macbeth'].map(play => (
    <NavLink to={`/plays/${play}` key={`play-${play}`}}>{play}</NavLink> 
)}} 

そして、私のルーティングは、このようなものになります:私はこのようになりますフロントエンド反応でサイドバー持っている私はプレーリンクの1つにの間を移動すると

<Switch> 
    <Route path="/" component={HomePageComponent} exact /> 
    <Route path="/books" component={BooksComponent} /> 
    <Route path="/poems" component={PoemsComponent} /> 
    <Route path="/plays/:title" component={PlayComponent} /> 
    <Route path="/plays/:title/:act" component={ActComponent} /> 
</Switch> 

を、 /booksから/plays/macbethになると、NavLinkはタブを適切に更新します。 の間で移動すると、/plays/macbethから/plays/hamletになると、NavLinkは更新されず、元のタブ(この場合はMacbeth)はアクティブのままです。

コンポーネントが変更されていないため、NavLink isActiveチェックの何かが起動していないという問題があると思われます。これは、別のサブリンク、たとえば/plays/hamlet/actI、次に/plays/macbethに移動すると、Macbethタブが期待どおりにアクティブとしてマークされているという事実によってさらに確認されます。ですから、コンポーネントが変更されていなくても、NavLinkを強制的に更新する方法はありますか?

答えて

1

exact小道具使用してみてください:

:あなたはそれはそれは同じコンポーネントなので、また、これを試して再レンダリングではないと思うので :

<Route exact path="/plays/:title" component={PlayComponent} /> 

ドク:https://reacttraining.com/react-router/web/api/Route/exact-bool

UPDATE

<Route path="/plays/:title" component={(props) => (<PlayComponent {...props}/>) } /> 
+0

提案していただきありがとうございます:私はそれを試み、おそらくそれを反映するために私の質問を更新する必要があります。サブセクション(例えば '/ plays/hamlet/actI')__stopped__はサイドバーでアクティブとマークされているので、問題を解決できないだけでなく、実際に問題が悪化しました。これは意図した結果ではありません。 – MBrizzle

+0

更新された提案が修正されました。ありがとうございます。コンポーネントが変更されていなくても再レンダリングを強制して、NavLinkの問題を修正したようです。 – MBrizzle

関連する問題