2017-09-27 8 views
0

アプリケーションで複数の3値演算子を使用していますが、クリックイベントで3値演算子を使用する方法を理解できませんでした。React.jsのclickイベントにwrite ternary演算子を使用する方法

私が作っているのは、ポップオーバーメニューです。そのメニュー項目が既に選択されていれば、メニュー項目の1つはクリックできません。他のメニュー項目のみがクリック可能でなければなりません。

画像

enter image description here

私は、次のコードを試してみましたが、それはうまくいきませんでした。 Reactのclickイベントに三項演算子を使用することはできませんか?もちろん

<p id="menuItem" {!this.sate.priceBar? onClick={this.clickHandle} : "" } style={!this.state.priceBar? { color:'white'} : {color : '#BBBBBB'} }>{!this.state.priceBar? "Spent Last 14 Days" : "Spent Last 14 Days"}</p> 

全コード

class Home extends React.Component{ 

constructor(props){ 
    super(props); 
    this.state = { 
     slideOpen : false, 
     priceBar: false, 
     open: false, 
    } 
this.handleClick = this.handleClick.bind(this); 
this.clickHandle = this.clickHandle.bind(this); 
} 


handleClick() { 
    this.setState({ 
     slideOpen : !this.state.slideOpen 
    }) 
console.log("slideOpen" + !this.state.slideOpen) 
} 

clickHandle() { 

this.setState({ 
      priceBar : !this.state.priceBar, 
      open: false 
    }) 
console.log(!this.state.priceBar) 
} 

handleTouchTap = (event) => { 
// This prevents ghost click. 
event.preventDefault(); 

this.setState({ 
    open: true, 
    anchorEl: event.currentTarget, 
}); 
}; 

handleRequestClose =() => { 
this.setState({ 
    open: false, 
}); 
}; 

render(){ 
    const PaymentPanel = this.state.slideOpen? "slideOpen" : ""; 
    const Dropdown = this.state.open? "show" : ""; 

return(
<div> 
<div id="PaymentPanel" className={PaymentPanel} > 
<div id="PaymentTitle" >{!this.state.priceBar? "Spent Last 14 Days" : "Spent Last 30 Days"}<img src={PaymentArrow} className="PaymentArrow PaymentToggle" onClick={this.handleTouchTap}/></div> 
<div id="Dropdown" className={Dropdown} open={this.state.open}> 
<p className="popoverToggle" onClick={this.handleRequestClose}> </p> 
<p id="menuItem" onClick={this.clickHandle} style={!this.state.priceBar? { color:'white'} : {color : '#BBBBBB'} }>{!this.state.priceBar? "Spent Last 14 Days" : "Spent Last 14 Days"}</p> 
<p id="menuItem" onClick={this.clickHandle} style={this.state.priceBar? { color:'white'} : {color : '#BBBBBB'} }>{this.state.priceBar? "Spent Last 30 Days" : "Spent Last 30 Days"}</p> 
</div> 


<h2 id="paymentSum" className={!this.state.open? "" : "close"}>{!this.state.priceBar? "$9,964.55" : "$19,929.1"}</h2> 


<ul className="paymentTool"> 
<li> 
<div onClick={this.handleTouchTap} className="tool">VISA <br /> {!this.state.priceBar? "$9,504.13" : "$19,008.26"}</div></li> 
<li><div className="tool">MasterCard <br /> {!this.state.priceBar? "$490.64" : "$981.28"}</div></li> 
<li><div className="tool">PayPal <br /> {!this.state.priceBar? "$824.52" : "$1,649.04"}</div></li> 
</ul> 
<div className="paymentSlide" onClick={this.handleClick}>{this.state.slideOpen? <img src={Arrowup} alt="arrowup" className="arrowup" /> : <img src={Arrowdown} alt="arrowdown" className="arrowdown"/>}</div> 
</div> 

<div className="PaymentTable" > 
<PaymentTable /> 
<ul> 
</ul> 
</div> 
</div> 
    ) 
} 
} 
+0

'state'はタイプミスに右である'ここthis.sate.priceBar'? –

+0

@ShubhamJain No.私は状態を調べるために状態を使用します。 – aaayumi

答えて

2

、三元は動作式の戻り値は文字列、ブラウザであるため、DOMのプロパティを返すために使用することはできませんし、 react.jsエンジンは文字列をプロパティとして扱いません。

は、代わりに:

onClick={!this.state.priceBar ? this.clickHandle : ''} 

はあなたのコードを変更します!

handleTouchTap(event){ 

} 

handleRequestClose() { 
} 

class Home extends React.Component{ 
 
constructor(props){ 
 
    super(props); 
 
    this.state = { 
 
     slideOpen : false, 
 
     priceBar: false, 
 
     open: false, 
 
    } 
 
    
 
this.handleClick = this.handleClick.bind(this); 
 
this.clickHandle = this.clickHandle.bind(this); 
 
} 
 

 

 
handleClick() { 
 
    this.setState({ 
 
     slideOpen : !this.state.slideOpen 
 
    }) 
 
console.log("slideOpen" + !this.state.slideOpen) 
 
} 
 

 
clickHandle() { 
 

 
this.setState({ 
 
      priceBar : !this.state.priceBar, 
 
      open: false 
 
    }) 
 
console.log(!this.state.priceBar) 
 
} 
 

 
handleTouchTap (event) { 
 
// This prevents ghost click. 
 
event.preventDefault(); 
 

 
this.setState({ 
 
    open: true, 
 
    anchorEl: event.currentTarget, 
 
}); 
 
} 
 

 
handleRequestClose() { 
 
this.setState({ 
 
    open: false, 
 
}); 
 
} 
 

 
render(){ 
 
    const PaymentPanel = this.state.slideOpen? "slideOpen" : ""; 
 
    const Dropdown = this.state.open? "show" : ""; 
 

 
return(
 
<div> 
 
<div id="PaymentPanel" className={PaymentPanel} > 
 
<div id="PaymentTitle" >{!this.state.priceBar? "Spent Last 14 Days" : "Spent Last 30 Days"}</div> 
 
<p id="menuItem" onClick={this.clickHandle} style={!this.state.priceBar? { color:'white'} : {color : '#BBBBBB'} }>{!this.state.priceBar? "Spent Last 14 Days" : "Spent Last 14 Days"} (Click me!)</p> 
 

 
click top line 
 

 

 
</div> 
 
</div> 
 

 
    ) 
 
} 
 
} 
 
ReactDOM.render(<Home />, document.querySelector('.app'))
<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 class="app"></div>

+0

'this.clickHandle'は私がクリックしても起動しませんでした。 – aaayumi

+0

あなたのコードはいくつかのエラーがあります。 – JiangangXiong

0
<p id="menuItem" onClick={!this.state.priceBar ? this.clickHandle : null}> 
+0

これは答えですか?もしそうなら、説明を追加してください。 –

関連する問題