我在我的应用程序中使用了几个三元运算符,但我无法弄清楚如何在点击事件中使用三元运算符。
我正在制作的是弹出式菜单。一旦选择了该菜单项,其中一个菜单项将不可点击。只能点击另一个菜单项。
图片
我尝试了以下代码,但它没有用。我们不能在React中使用三元运算符进行点击事件吗?
<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 :(得分:2)
当然,三元运算不能用于返回dom的属性,因为表达式的返回值是一个字符串,浏览器和react.js引擎不会将字符串视为属性。
相反:
public class SpinnerAdapter extends BaseAdapter{
private LayoutInflater layoutInflater;
private List<GetBalance> listData;
private Context context;
public SpinnerAdapter(Context context, List<GetBalance> listData) {
this.context = context;
layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.listData = listData;
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return (GetBalance)listData.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder spinnerHolder;
if(convertView == null){
spinnerHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.spinner_list, parent, false);
spinnerHolder.spinnerItemList = (TextView)convertView.findViewById(R.id.spinner_list_item);
convertView.setTag(spinnerHolder);
}else{
spinnerHolder = (ViewHolder)convertView.getTag();
}
spinnerHolder.spinnerItemList.setText(listData.get(position).getUsers());
return convertView;
}
class ViewHolder{
TextView spinnerItemList;
}
修改您的代码:
onClick={!this.state.priceBar ? this.clickHandle : ''}
handleTouchTap(event){
}
handleRequestClose() {
}
&#13;
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'))
&#13;
答案 1 :(得分:2)
如果您在React中使用函数而非类:
onClick={() => condition ? functionToClick() : null}
答案 2 :(得分:0)
<p id="menuItem" onClick={!this.state.priceBar ? this.clickHandle : null}>