[英]Rendering React components conditionally
I am struggling to to render certain fragment of react component.我正在努力渲染反应组件的某些片段。 This is how my component looks like:
这就是我的组件的样子:
import XYZ from './XYZ.js';
class ABC extends React.Component{
constructor(props, context){
super(props, context);
this.state = {
showXYZ: false,
showControl: false
}
}
onshowClick = () => {
this.setState({ showXYZ: true });
};
oncontrolClick = () => {
this.setState({ showXYZ: true });
};
render() {
return(
{
this.state.showXYZ
? <XYZ />
: <div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p>}
)
}
}
I want to render the same fragment when showControl is true also.当 showControl 也为真时,我想渲染相同的片段。 Something like this:
像这样的东西:
return(
{
this.state.showControl
? <XYZ click = {this.props.oncontrolClick} />
<div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p> :null
}
)
Now the problem is how can I handle these two together at a time.现在的问题是我怎样才能同时处理这两个。 I tried to use logical operators but seems not working.
我尝试使用逻辑运算符,但似乎不起作用。
Try multi ternary operator like shown below.尝试如下所示的多三元运算符。
this.state.showXYZ ? <XYZ /> : this.state.showControl ? <XYZ click = {this.props.oncontrolClick} /> :
<div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p>
<div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p>
You forget to wrap else component in single div.您忘记将 else 组件包装在单个 div 中。 Use this
用这个
<div>
<div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p>
</div>
By the way You can use if conditions to make your life simple like:顺便说一句,您可以使用 if 条件使您的生活变得简单,例如:
render(){
if(this.state.showXYZ || this.state.showControl)
return(<XYZ click={this.state.showControl? this.props.oncontrolClick : null}/>)
else
{
return(
<div>
<div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p>
</div>
)
}
}
You can only return one element from conditional statements.您只能从条件语句中返回一个元素。 Either wrap them in div or React Fragment
将它们包装在 div 或 React Fragment 中
return(
<div>
{
this.state.showControl ? <XYZ click = {this.props.oncontrolClick} /> :
<div>
<div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p>
</div>
}
</div>
)
Think of Ternary Operators as just shortened if statements, using ||将三元运算符视为缩短的 if 语句,使用 || should fix your problem:
应该解决您的问题:
return(
<div>
{ this.state.showControl || this.state.showXYZ
? <XYZ click={this.props.oncontrolClick} /> :
<div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p>}
}
</div>
)
Try this.尝试这个。
render() {
return (
this.state.showXYZ || this.state.showControl
? <XYZ click={this.state.showControl?this.props.oncontrolClick:()=>{}}/>
: <React.Fragment><div>
<Button onClick={this.onshowClick}>SHOW</Button>
</div>
<h1>Some text</h1>
<p> More text </p></React.Fragment>
)
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.