2017-03-13 15 views
2

クラスをDomノードに適用できませんでした。このコードでは、すべてのDOMノードにクラスが適用されます。onMouseEnterの単一の要素に反応クラスを適用する

import { Component } from 'react'; 

export default class App extends Component { 
    constructor(props){ 
     super(props) 

     this.state = { 
      active: false 
     } 
    } 

    onMouseEnter(){ 
     this.setState({active:true}) 
    } 

    render(){ 
     const items = [1,2,3,4,5]; 
     return (
      <div> 
       {items.map((obj,i) => <div key={i} className={this.state.active ? 'active' : ''} onMouseEnter={this.onMouseEnter.bind(this)}>{obj}</div>)} 
      </div> 
     ); 
    } 
} 

ここで何が間違っていますか?また、どのようにonMouseLeaveを行うには? this.setState({active:false})をfalseに設定するだけですか?

答えて

1

あなたは近づいています...あなたが望むのは、「アクティブインデックス」を割り当てるようなものです。あなたのonMouseEnter()機能は、アクティブな項目のインデックスを取るように変更することができ、このような

onMouseEnter(index){ 
    this.setState({active: index}) 
} 

そして、あなたの機能ではなく、次のようになりレンダリング:あなたはあなたが投稿の例では間違っていた

render(){ 
    const items = [1,2,3,4,5]; 
    return (
     <div> 
      {items.map((obj,i) => 
      <div key={i} className={this.state.active === i ? 'active' : ''} onMouseEnter={this.onMouseEnter.bind(this, i)}>{obj}</div>)} 
     </div> 
    ); 
} 

を事すべての項目にアクティブなクラスを適用したのではなく、リスト内のどの項目が実際にアクティブであるかを区別しません。私が持っていないenter image description here

(あなたは私のマウスは、もは​​やアクティブな項目の上にマウスを移動されますが、それはまだ黄色で見ることができないとして)

+0

この質問に対する私の答えにあなたのコメントは意味をなさないonMouseEnterが既に条件を持っているのでonMouseLeaveを実行する。しかし、もし私が滞在するためにアクティブなクラスにしたいですか? – Mellisa

+0

https://fiddle.jshell.net/re1f0to8/ここには、私が何を記述しているかの作業フィドルです。 – Maxwelll

+0

フィドルに感謝します!しかし、もし私がクラスを滞在させたいなら、どうしたらいいですか? onMouseLeaveを削除しましたが、onMouseEnter関数に条件があるため、https://fiddle.jshell.net/8wsr7xa1/のままになりません。 – Mellisa

関連する問題