이건 어때? 간단한 도움 If
컴포넌트를 정의 해 봅시다 .
var If = React.createClass({
render: function() {
if (this.props.test) {
return this.props.children;
}
else {
return false;
}
}
});
그리고 이런 식으로 사용하십시오 :
render: function () {
return (
<div id="page">
<If test={this.state.banner}>
<div id="banner">{this.state.banner}</div>
</If>
<div id="other-content">
blah blah blah...
</div>
</div>
);
}
업데이트 : 내 대답이 대중화 되면서이 솔루션과 관련된 가장 큰 위험에 대해 경고해야한다고 생각합니다. 다른 답변에서 지적했듯이 <If />
구성 요소 내부의 코드 는 조건이 true인지 false인지에 관계없이 항상 실행됩니다. 따라서 다음 예제 는 banner
is 인 경우 실패 null
합니다 (두 번째 줄의 속성 액세스 참고).
<If test={this.state.banner}>
<div id="banner">{this.state.banner.url}</div>
</If>
사용할 때주의해야합니다. 대안 (safer) 접근법에 대한 다른 답변을 읽는 것이 좋습니다.
업데이트 2 : 이 접근법은 위험 할뿐만 아니라 필사적으로 번거 롭습니다. 개발자 (me)가 패턴을 전달하려고 할 때 한 영역에서 다른 영역으로 접근하려고 시도하지만 실제로 작동하지 않습니다 (이 경우 다른 템플릿 언어)의 전형적인 예입니다.
조건부 요소가 필요한 경우 다음과 같이하십시오.
render: function () {
return (
<div id="page">
{this.state.banner &&
<div id="banner">{this.state.banner}</div>}
<div id="other-content">
blah blah blah...
</div>
</div>
);
}
else 브랜치가 필요한 경우 삼항 연산자를 사용하십시오.
{this.state.banner ?
<div id="banner">{this.state.banner}</div> :
<div>There is no banner!</div>
}
더 짧고 우아하며 안전합니다. 나는 항상 그것을 사용합니다. 유일한 단점은 else if
쉽게 분기 할 수는 없지만 일반적으로 그렇게하지는 않는다는 것입니다.
어쨌든 이것은 JavaScript의 논리 연산자 가 작동 하는 방식 덕분에 가능 합니다. 논리 연산자는 다음과 같은 작은 트릭을 허용합니다.
<h3>{this.state.banner.title || 'Default banner title'}</h3>
else
지점 이 없으면 어떻게 작동합니까? 저는 jsx에 익숙하지 않습니다 ...