React Routerのチュートリアル Lesson5
前回の続き。
Lesson5 - Active Links
今回は、アクティブなリンクにスタイルを適用して、アクティブなリンクをわかりやすく表示してみます。
Link
にスタイルを適用する
ハイパーリンクにスタイルを与えるには、Link
コンポーネントのactiveStyle
というPropを設定してあげます。
import React from 'react'; import { Link } from 'react-router'; class App extends React.Component { constructor(props) { super(props); } render() { return ( <div> <h1>React Router Tutorial</h1> <ul role="nav"> <li><Link to="/about" activeStyle={{ color: 'red' }}>About</Link></li> <li><Link to="/repos" activeStyle={{ color: 'red' }}>Repos</Link></li> </ul> { this.props.children } </div> ); } } export default App;
これで、アクティブなリンクが赤色で表示されます。
別の手段でスタイルを適用する
上記とは別に、activeClassName
というPropsを使う方法もあります。
この方法は、Link
にclassを設定して、スタイルは別途スタイルシートで定義する方法です。
まずは、activeStyle
をactiveClassName
に置き換えます。与えるclass名はactive
にします。
import React from 'react'; import { Link } from 'react-router'; class App extends React.Component { constructor(props) { super(props); } render() { return ( <div> <h1>React Router Tutorial</h1> <ul role="nav"> <li><Link to="/about" activeClassName="active">About</Link></li> <li><Link to="/repos" activeClassName="active">Repos</Link></li> </ul> { this.props.children } </div> ); } } export default App;
次に、スタイルシートapp/index.css
を作成し、スタイルを定義します。
.active { color: green; }
最後に、app/index.css
をapp/index.jsx
で読み込みます。
... (snip) ... require('./index.css'); ... (snip) ...
今度は、アクティブなリンクが緑色で表示されるようになります。
Link
コンポーネントのラッパーを作る
Link
にいちいちactiveClassName
を渡すのはDRYじゃないですので、Link
のラッパーコンポーネントNavLink
を作ります。
import React from 'react'; import { Link } from 'react-router'; class NavLink extends React.Component { render() { return (<Link {...this.props} activeClassName="active" />); } } export default NavLink;
NavLink
でLink
を置き換えます。
import React from 'react'; import NavLink from './nav_link' class App extends React.Component { constructor(props) { super(props); } render() { return ( <div> <h1>React Router Tutorial</h1> <ul role="nav"> <li><NavLink to="/about">About</NavLink></li> <li><NavLink to="/repos">Repos</NavLink></li> </ul> { this.props.children } </div> ); } } export default App;
まとめ
- アクティブなリンクにスタイルを適用するには、
Link
コンポーネントのactiveStyle
またはactiveClassName
を使う。 activeStyle
では、スタイルを直接設定する。activeClassName
ではclass名を設定し、スタイルは別途スタイルシートで設定する。Link
コンポーネントは、自身がアクティブか否かを知っているので、ラッパーを作ればactiveClassName
の指定をいちいちしなくて良い。
ソースコード
上記のリリースではNavLink
を入れ忘れたので、下記で対応。