2017-03-20 26 views
0

私は2つのクラスReactjs兄弟クラストグル

ボタンを置くときにどのように私は兄弟ボックスが緑色に表示させることができますを使用したくありませんか?

現在のところ、すべてのボックスは緑色に覆われています。

以下はスニペットのコードです。

ご協力ありがとうございます。状態のホバーのアイテムのインデックスだけでなく、何かが推移しているかどうかを設定し

class Lol extends React.Component{ 
 
    constructor(props){ 
 
    super(props) 
 
    this.state = { 
 
     green : false 
 
    }; 
 
    } 
 
    render =() =>{ 
 
    let green = (this.state.green) ? 'green' : ''; 
 
    let outs = []; 
 
    for(let i=0;i<5;i++){ 
 
     outs.push( 
 
     <div> 
 
      <button onMouseOver={() => { 
 
       this.setState({green : true}); 
 
      }} 
 
      onMouseLeave={() => { 
 
       this.setState({green : false}); 
 
      }} 
 
      > 
 
      Turn box green 
 
     </button> 
 
     <div className={'box '+green}> 
 
     </div> 
 
     </div> 
 
     ); 
 
    } 
 
    return (
 
     <div> 
 
     {outs} 
 
     </div> 
 
    ); 
 
    } 
 
} 
 
ReactDOM.render(<Lol />,document.getElementById("a"));
.box{ 
 
    border:1px solid #000; 
 
    height:20px; 
 
    width:20px; 
 
} 
 
.green{ 
 
    background:green; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 

 
<div id="a"> 
 
    </div>

+0

あなたは、CSS '+'セレクタのように次の兄弟を言っていますか? –

+0

申し訳ありませんが、あなたは明示的にあなたが複数のクラスを必要としないと答えたので、私は自分の答えを削除しました。なぜあなたはその制約があるのか​​聞いてもよろしいですか? –

答えて

2

。そして、現在の反復インデックスに保存されたインデックスを比較:

class Lol extends React.Component{ 
 
    constructor(props){ 
 
    super(props) 
 
    this.state = { 
 
     greenIndex: null 
 
    }; 
 
    } 
 
    render =() =>{ 
 
    
 
    let outs = []; 
 
    for(let i=0;i<5;i++){ 
 
     const { greenIndex } = this.state; 
 
     const greenClass = (greenIndex === i) ? 'green' : ''; 
 

 
     outs.push( 
 
     <div> 
 
      <button onMouseOver={() => { 
 
       this.setState({ greenIndex: i }); 
 
      }} 
 
      onMouseLeave={() => { 
 
       this.setState({ greenIndex: null }); 
 
      }} 
 
      > 
 
      Turn box green 
 
     </button> 
 
     <div className={'box '+greenClass}> 
 
     </div> 
 
     </div> 
 
     ); 
 
    } 
 
    return (
 
     <div> 
 
     {outs} 
 
     </div> 
 
    ); 
 
    } 
 
} 
 
ReactDOM.render(<Lol />,document.getElementById("a"));
.box{ 
 
    border:1px solid #000; 
 
    height:20px; 
 
    width:20px; 
 
} 
 
.green{ 
 
    background:green; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 

 
<div id="a"> 
 
    </div>

+0

このソリューションは、鉱山よりもはるかに速くチェースに切り込みます。また、独自の要素IDが追加され、好きなものに反応します。 私の解決策として唯一のことは、グローバルコンポーネントがその状態でグリーンを追跡する必要があるという理由がないということです。 –

+0

これは機能しますが、理想的には各ボタンはそれぞれの状態を担当する独自のコンポーネントに分解されます。 – jered

+0

@jeredはい私はOPの要求を尊重しようとしていた:「私は2つのクラスを使いたくない」(私はこれをCSSクラスではなくReactクラスと解釈した) –