2016-12-08 30 views
0

私はナビゲーションにreact-router-reduxを使用しており、connect()コンポーネントをネストしています。これは、反応ルータのルートが変更されたときに、ネストされたコンポーネントが再レンダリングされない点を除いて、正常に動作しているようです。react-routerは経路変更時にredux connect()のコンポーネントを再レンダリングしません

具体的には、以下の構造において、AppおよびSidebarconnect()であり、両方ともstateの情報が必要です。私はSidebarLinkをクリックすると:

  • @@router/LOCATION_CHANGEアクションが
  • 、発射された私は反応し-ルータ再来しているの状態を更新しているので、私の状態に結合されているrouterReducer
  • のApp再レンダリングし、
  • が表示されますが、サイドバーは再表示されないため、「アクティブ」Linkは更新されません。activeClassは変更されません。

ここで間違っていますか?

ルータ

<Router component={App}> 
    <Route path="foo" component={Foo}/> 
    <Route path="bar" component={Bar}/> 
    <Route path="baz" component={Baz}/> 
</Router> 

のApp

<div> 
    <Sidebar/> 
    <div> 
    {children} 
    </div> 
</div> 

サイドバー

<nav> 
    <Link to="/foo" activeClass="active">Foo</Link> 
    <Link to="/bar" activeClass="active">Bar</Link> 
    <Link to="/baz" activeClass="active">Baz</Link> 
</nav> 
+0

現在の時刻を任意にサイドバーに渡すことでこの問題を回避しています( '')。それが毎回異なるという事実は、再レンダリングを強制するようですが、実際にそれを修正するものではありません。 – nicholas

答えて

1

私はこの同じ問題(Reduxのを使用していない)を持っていて、決定リアクトているように見えますレンデを呼び出さないAppが再レンダリングされても、サイドバーのためにもう一度rを押してください。サイドバーをwithRouterにラップして修正しました。ルートが変わるたびにサイドバーが再レンダリングされます。このような

何か:

import {withRouter} from 'react-router' 
// or 'react-router-dom' on v4.x 
class Sidebar extends Component {...} 
export default withRouter(Sidebar) 
-1

この問題はよく反応し、ルータのガイドページhttps://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/guides/blocked-updates.md#dealing-with-update-blocking

TLで文書化され、DRは、あなたのコンポーネントが位置認識されていることを確認してください。 sCUまたはHoCを使用して

+2

ようこそスタックオーバーフロー!ソリューションへのリンクは歓迎しますが、あなたの答えはそれが無ければ有用であることを確認してください:[リンクの前後にコンテキストを追加する](// meta.stackexchange.com/a/8259)あなたの仲間のユーザーは、なぜそれがあるのか​​、ターゲットページが利用できない場合にリンクしているページの最も関連性の高い部分を引用します。 [リンク以上の回答は削除される可能性があります。](// stackoverflow.com/help/deleted-answers) – FelixSFD

関連する問題