React에서의 조건부 렌더링
조건부 렌더링이란 React render시 특정 조건에 따른 동작을 하게 하는 것입니다.
사실 그냥 if문 사용과 다를게 없습니다. 이해하기 어렵지 않으실겁니다 하하
아래 소스를 참고해보면
{const isLoggedIn = thisstateisLoggedIn;let button = null;if isLoggedInbutton = <LogoutButton onClick=thishandleLogoutClick />;elsebutton = <LoginButton onClick=thishandleLoginClick />;return<div><Greeting isLoggedIn= isLoggedIn />button</div>;}
isLoggedIn 메서드에 따라서 LogoutButton일지 LoginButton 일지 button변수에 할당해 줍니다.
그 후 return 시 {button}으로 넣어주면 렌더링 시 isLoggedIn여부에 따라 다른 컴퍼넌트가 노출되겠죠?
즉 isLoggedIn이 True일 경우 아래와 같이 return 해줄겁니다.
return<div><Greeting isLoggedIn= isLoggedIn /><LogoutButton onClick=thishandleLogoutClick />;</div>;
논리연산자 &&을 이용하여 조건주기
논리연산자 &&을 이용하여 조건을 줄 수 있습니다.
{const unreadMessages = propsunreadMessages;return<div><h1>Hello!</h1>unreadMessageslength > 0 &&<h2>You have unreadMessageslength unread messages</h2></div>;}
조건 && expression입니다.
조건이 true일 경우에는 && 이후에 위치한 expression을 반환하고, false일 경우 expression을 반환하지 않고 무시합니다.
&&나 ||은 아래와 같이 사용 할 수 있다는 점을 아시면 쉽게 이해가는 구문입니다.
string의 경우 ''(공백)을 제외하면 true라는 점을 기억하세요.
console; //successconsole; //falseconsole; //trueconsole; //success
삼항연산자를 이용한 조건주기
삼항연산자는 아래와 같습니다.
조건 ? 참 : 거짓
조건이 참일경우에는 참 부분이 거짓일 경우에는 거짓인 부분이 return 됩니다.
{const isLoggedIn = thisstateisLoggedIn;return<div>The user is <b> isLoggedIn ? 'currently' : 'not'</b> logged in</div>;}
isLoggedIn이 true일경우 currently, false일 경우 not이 출력 되겠죠?
컴퍼넌트 렌더링 방지
컴퍼넌트가 다른 컴퍼넌트에 의해 렌더링 되었을 때에도 구성요소를 숨길 수 있습니다.
아래 컴퍼넌트는 warn값을 받아서 해당값이 false일 경우 null을 return합니다.
React에서는 null, undefined, 공백에 대해서는 렌더링 하지 않기 때문에 아래 코드는 warn 값에 의해서 렌더링되거나 되지 않습니다.
{if !propswarnreturn null;return<div className="warning">Warning!</div>;
}