2016-10-10 5 views
-1

反応ルータチュートリアルのactive links sectionでは、アクティブリンクを使用するために以下のことを提案します。super()でサブクラス化パターンを反応させる

あなたのサイトのほとんどのリンクは、それらがアクティブであることを知る必要はありませんが、通常は主要なナビゲーションリンクだけが知る必要があります。これらをラップすると便利なので、activeClassNameまたはactiveStyleがどこにいても覚えておく必要はありません。

ここでは、3つの点をスプレッド演算子で使用します。それは私たちの小道具をクローンし、このユースケースでは、私たちが恩恵を受けるために必要なコンポーネントにactiveClassNameをクローンします。

次のようになりますモジュール/ NavLink.jsで新しいファイルを作成します。

// modules/NavLink.js 
import React from 'react' 
import { Link } from 'react-router' 

export default React.createClass({ 
    render() { 
    return <Link {...this.props} activeClassName="active"/> 
    } 
}) 

を私は以下のパターンの作品のようなものを作るための方法があったかどうかを知るために興味があった:

// modules/Navlink.js 
import React from 'react' 
import { Link } from 'react-router' 

export default class extends Link { 
    constructor(props) { 
     super(props); 
     props.activeClassName = 'active' 
    } 
} 
+0

なぜ私の質問は、downvotedでしたか? – ericmarkmartin

答えて

-1

ES6リアクションクラスでは、上記のようにsuperを呼び出すことができます。クラスはそのように宣言された後、デフォルトの小道具を宣言することができます。

myClass.defaultProps = { 
    activeClassName: 'active' 
} 

それとも、このようなコンストラクタのパラメータにデフォルトの小道具を宣言することがあります。

export default class extends Link { 
    constructor({firstProp, secondProp, thirdProp = "default value here"}) { 
     super(props); 
    } 
} 
+0

ありがとうございます。最初の提案を試してみましたが、うまくいきましたが、2番目の提案を任意の数のプロパティで実装する方法があるかどうか疑問に思っていました。これは今ではうまくいきません(コンストラクタは '小道具を使用するための議論として)。 – ericmarkmartin

関連する問題