리엑트에서 조건문을 통해 JSX 구성하기

리엑트를 사용하다보면 조건문을 사용해 특정조건에 요소를 보여줄지 말아야할지 정해야하는 경우가많다. 이럴때 응용 및 사용 할 수 있는 다양한 조건문을 알아보자

1. 컴포넌트 안에서 쓰는 if/else

function Component() {
  if ( true ) {
    return <p>참이면 보여줄 HTML</p>;
  } else {
    return null;
  }
} 
function Component() {
  if ( true ) {
    return <p>참이면 보여줄 HTML</p>;
  } 
  return null;
} 

2. JSX안에서 쓰는 삼항연산자(ternary operatior)

function Component() {
  return (
    <div>
      { 1 === 1 ? <p></p> : null }
    </div>
  )
} 
function Component() {
  return (
    <div>
      {
        1 === 1 ? <p></p> :
        ( 2 === 2 ? <p>그다음 참</p> :
        <p>거짓</p> 
        )
      }
    </div>
  )
} 

3. && 연산자로 if 역할 대신하기

“만약에 이 변수가 참이면 <p></p>를 이 자리에 뱉고 참이 아니면 null 뱉고”

이때 &&을 사용하면 깔끔하게 작성할 수 있는데

function Component() {
  return (
    <div>
      {
        1 === 1
        ? <p>참이면 보여줄 HTML</p>
        : null
      }
    </div>
  )
} 
-------------------------------------------------------------------
function Component() {
  return (
    <div>
      { 1 === 1 && <p>참이면 보여줄 HTML</p> }
    </div>
  )
}

때문에 “만약에 이 변수가 참이면 <p></p>를 이 자리에 뱉고 참이 아니면 null 뱉고” 이런 상황에서 자주 쓸 수 있는 간단한 조건문이다.

4. switch / case 조건문

if문이 중첩되어있을때 가끔 쓰인다.

아래와 같이 if을 중첩해서 써야하는경우

function Component2(){
  let user = useState('seller');
  if (user === 'seller'){
    return <h4>판매자 로그인</h4>
  } else if (user === 'customer'){
    return <h4>구매자 로그인</h4>
  } else {
    return <h4>그냥 로그인</h4>
  }일단 state를 만들어놓고 if문으로 state를 검사하는 문법을 써야할  같지만

이번엔 if문이 아니라 
}

자바스크립트 switch 문법을 이용하면 괄호를 조금 더 줄일 수 있다.

function Component2(){
  var user = ''
  
  switch (user){
    case 'seller' : //user가 seller이면 아래줄실행
      return <h4>판매자 로그인</h4>
    case 'customer' : //user가 customer이면 아래줄실행
      return <h4>구매자 로그인</h4>
    default : // case에 해당하는 값이없으면 실행
      return <h4>그냥 로그인</h4>
  }
}

5. object/array 자료형을 응용

array 자료형을 응용해서 쓸수도있다.

예를 들면 쇼핑몰에서 상품설명부분을 탭으로 만든다고 할때

경우에 따라서 상품정보 / 배송정보 / 환불약관 내용을 보여주어야 하는데

  1. 현재 state가 info면 <p>상품정보</p>
  2. 현재 state가 shipping이면 <p>배송정보</p>
  3. 현재 state가 refund면 <p>환불약관</p>

을 각각 보여주고싶을때

자바스크립트 object 자료형에 내가 보여주고 싶은 HTML을 다 담아 보여줄 수 있다.

function Component() {
  let status = useState('refund');
    
  return (
    <div>
      {
        { 
           info : <p>상품정보</p>,
           shipping : <p>배송관련</p>,
           refund : <p>환불약관</p>
        }[status]
      }

    </div>
  )
} //  <p>환불약관</p>이 출력된다.