2016-07-06 6 views
1

私のホームページには、リスト、about、historyという3つのメインリンクがあります。私は詳細と写真の画面にいるときにリストをアクティブにするリンクを取得したい。特定のリンクをアクティブにするには?ここで複数のURL状態のための反応ルータとのアクティブなリンクを1つだけに設定するにはどうすればよいですか?

は私が詳細と写真にいるとき、常にアクティブリストがリンクしたい私のルータコード、

<Router history={hashHistory}> 
    <Route path="/"> 
     <IndexRedirect to="home/lists" /> 
     <Route path="home" component={Home}> 
      <Route path="lists" component={Lists} /> 
      <Route path="details" component={Details} /> 
      <Route path="photos" component={Photos} /> 
      <Route path="about" component={About} /> 
      <Route path="history" component={History} /> 
     </Route> 
    </Route> 
</Route> 

Menuコンポーネント、

<li><Link to="home/lists" activeClassName="active">Lists</Link></li> 
<li><Link to="home/about" activeClassName="active">About</Link></li> 
<li><Link to="home/history" activeClassName="active">History</Link></li> 

です。この問題を解決する方法。私はこの問題を解決するために過去3時間を苦労しています。誰かがこの問題から私を離れてください

答えて

0

ルータからのロケーションオブジェクトを使用できます。

this.props.location.pathname 

現在のURLに関する情報を保存します。ここにいくつかの擬似コードがあります:

<Link to="home/lists" className={this.props.location.pathname === 'home/details' || (...) ? 'active' : 'notActive'}>Lists</Link> 
+1

@マリウスジャスティススローエラーです。 "Uncaught TypeError:未定義の 'pathname'プロパティを読み取ることができません。 – Sathya

+1

私は同じエラーを受け取ります –

+0

あなたのコンポーネントが純関数である場合、これは動作しません。その場合、明示的に 'location'オブジェクトをあなたの関数に小道具として渡すべきです。 – ESWAT

関連する問題