2017-05-31 10 views
0

私はexpressのテンプレートエンジンとしてReactを使用しており、適切なアンカー要素にcssクラスを追加しようとしています。Reactを使用してタブをアクティブに設定する

現在、要求パスをコントローラ経由でNavbarコンポーネントに戻しています。以下は私のコードです。私は....私はとても近くに感じてる

更新されたコード(2017年5月31日):

const React = require('react'); 


class Navbar extends React.Component { 
    constructor(...props) { 
    super(...props); 
    this.setActiveTab = this.setActiveTab.bind(this) 
    this.state = { 
     currentPage: "/" 
    } 
    } 

    setActiveTab(e) { 
    console.log(e.target) 
    this.setState({ 
     currentPage: e.target.href 
    }) 
    } 

    render() { 
    const { path } = this.props 
    let classString = path === this.state.currentPage ? 'nav-item is-tab is-active' : 'nav-item is-tab' 

    return (
     <nav className="nav"> 

     <div className="nav-left"> 
      <a className="nav-item"> 
      <h1>CREATORS NEVER DIE</h1> 
      </a> 
     </div> 

     <div className="nav-right nav-menu"> 
      <a href="/" className={classString} onClick={this.setActiveTab}> 
      Home 
      </a> 
     </div> 


     </nav> 
    ) 
    } 
} 

module.exports = Navbar; 
+0

あなたが直面しているエラーは何ですか? –

+0

@VikramSaini現在、エラーに直面していません。コンソール:console.log( "現在のページと同じパス")に表示されます。私は次のステップが正しいアンカータグにクラスを追加することを実行することを確認していません – Dileet

+0

大丈夫あなたが達成したいと正確に何を説明してくださいできますか? –

答えて

1

これを実現するために、複数の方法があります。

私はあなたのアプリケーションの残りの部分についてはあまり知りませんが、これはあなたが取る必要があります一般的なアプローチである:

まず、それが有効なパスである場合はブール値を返すようにcheckActiveTabを変更

checkActiveTab = (path) => { 
return path === this.state.currentPage; 
} 

(注記:あなたはあなたの完全な成分を含んでいました、私はあなたがcheckActiveTab関数にthisを結合していないようthis.stateをチェックするために働いているかわからない)

次あなたはREN

<a href="/" className={`nav-item is-tab ${ this.checkActiveTab('Home') ? 'is-active' : '' }`}> 
    Home 
</a> 
+0

私は完全なコンポーネントを含んでいました。状態を現在のページに変更するにはどうすればよいですか? – Dileet

+0

質問で自分のコードを更新しました。 onClickを設定する関数を作成しましたが、関数内にコンソールログが設定されていないため、登録していないようです。 – Dileet

+0

これは、アンカータグを使用しているためにブラウザが新しいページに移動し、コンポーネントが再度マウントされるためです。 –

1

私はこの私が、私はこれを作ることができ、このよう

でこれを行っている可能性がありました場合:タブをDER、あなたはそれが現在のページであれば、我々はアクティブなクラスを設定しますチェックしますアクティブなクラスを追加するロジックを持つコンポーネントとしてnav。

const Nav = (props) => { 
    let classString = props.isActive ? 'nav-item is-tab is-active' : 'nav-item is-tab' 
    return (<div className="nav-right nav-menu"> 
      <a href={props.path} className={classString}> 
      Home 
      </a> 
     </div> 
    ) 
} 

今、あなたは、ナビゲーションコンポーネントのために送られたパスとのisActiveブール値をチェックするために親コンポーネントに基づいて、ロジックを記述することができます。

URLに基​​づいて、どのNavがisActive小道具をtrueにするかを特定することができます。

<Nav path={this.props.path} isActive ={this.props.path === this.state.currentPage} </Nav> 
+0

私のコードが更新されました。親は、現在のページに関するナビゲーションバーの状態を持っていません。だから、私たちはnavbarコンポーネントを使うべきです。私の現在の問題は、適切なリンクをクリックするとnavbar状態を更新することです。今すぐホームリンクを押すと、console.logが関数に設定されていません。 – Dileet

関連する問題