条件付きレンダリング
Reactは、パッケージングに必要なアクションの構成部品を作成します。これにより、アプリケーションのステータスに応じて、いくつかの構成部品しかレンダリングできません。
Reactでは、条件レンダリングはJavaScriptの条件処理と同じです.
function UserGreeting(props) {
return <h1>Welcome back!!</h1>
}
function GuestGreeting(props) {
return <h1>Please sign up.</h1>
}
条件付きレンダリングされた構成部品の結果はPlease sign up.
です.function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
if(isLoggedIn) <UserGreeting />
return <GuestGreeting />
}
ReactDOM.render(
<Greeting isLoggedIn={false} />,
document.getElementById('root')
)
要素変数
変数を使用して要素を格納できます.出力された他の部分は、変更せずに部分要素を条件付きでレンダリングすることができる.
function LoginButton(props) {
return (
<button onClick={props.onClick}>
Login
</button>
)
}
function LogoutButton(props) {
return (
<button onClick={props.onClick}>
LogOut
</button>
)
}
構成部品の例を条件付きで再レンダリングします.class LoginControl extends React.Component {
constructor(props) {
super(props);
this.handleLoginClick = this.handleLoginClick.bind(this);
this.handleLogoutClick = this.handleLogoutClick.bind(this);
this.state = {isLoggedIn: false};
}
handleLoginClick() {
this.setState({isLoggedIn: true});
}
handleLogoutClick() {
this.setState({isLoggedIn: false});
}
render() {
const isLoggedIn = this.state.isLoggedIn;
let button;
if (isLoggedIn) {
button = <LogoutButton onClick={this.handleLogoutClick} />;
} else {
button = <LoginButton onClick={this.handleLoginClick} />;
}
return (
<div>
<Greeting isLoggedIn={isLoggedIn} />
{button}
</div>
);
}
}
ReactDOM.render(
<LoginControl />,
document.getElementById('root')
);
論理&&演算子ifをインラインとして表す
カッコには式を含めることができます.
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
<h1>Hello!</h1>
{unreadMessages.length > 0 &&
<h2>
You have {unreadMessages.length} unread messages.
</h2>
}
</div>
);
}
const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(
<Mailbox unreadMessages={messages} />,
document.getElementById('root')
);
&&
以降の注記は、true
の条件で出力される.条件演算子if-elseで行表現を構築する
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
</div>
);
}
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
{isLoggedIn
? <LogoutButton onClick={this.handleLogoutClick} />
: <LoginButton onClick={this.handleLoginClick} />
}
</div>
);
}
可読性は低下する可能性があるが、場合によっては条件が複雑な場合には素子を分離することができる.シンボルのレンダリングをブロックするには
他のエレメントによってレンダリングされたときに、そのエレメント自体を非表示にする場合は、レンダリング結果を出力するのではなく、
null
を返すことができます.function WarningBanner(props) {
if (!props.warn) {
return null;
}
return (
<div className="warning">
Warning!
</div>
);
}
class Page extends React.Component {
//...
}
ReactDOM.render(
<Page />,
document.getElementById('root')
);
要素のrender
メソッドからnull
を返すと、ライフサイクルメソッド呼び出しに影響しません.リファレンス
このポスターは「実戦フィードバック」公式サイトhttps://ko.reactjs.org/で公開される.
REACTチュートリアルhttps://ko.reactjs.org/docs/conditional-rendering.htmlを参照して作成します.
Reference
この問題について(条件付きレンダリング), 我々は、より多くの情報をここで見つけました https://velog.io/@gay0ung/조건부-렌더링テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol