JSX에서 조건문 사용하기

2024. 4. 17. 00:56·웹/React

React 내의 JSX 안에서는 if문을 사용할 수 없다.

 

 

JSX내에서 if문을 사용할 수 없는 이유

JSX내에서는 표현식만 사용가능하다.

먼저 자바스크립트에서 실행 가능한 코드줄을 문(statement) 이라고 부른다. 문 중에서도 값으로 평가될 수 있는 문을 표현식(expression)이라고 부른다.

● 표현식에 해당하는 문 : 명확한 값이 반환되어 값으로 평가가 가능하다.
let a = 3;
true ? <div>true</div> : <div>false</div>


●  표현식이 아닌 문 : 명확한 값이 반환되지 않고 실행문 등을 포함한다.
if ( true ) {
    console.log("true");
} else {
    console.log("false");
}​


이외 for 반복문 등...

 

개발자가 JSX내에 작성한 코드는 변환 과정을 거친다. 예를들어

const element = <h1>Hello, World!</h1>;

// 이 코드는 아래와 같이 변환된다.

const element = React.createElement( "h1", null, "Hello, world!" );

 

React.createElement로 변환된 코드는 첫번째 인자로 태그명, 두번째 인자로 props, 세번째 인자로 자식 요소들을 받는다. 이 자리에는 명확한 값을 작성해주어야 하는데 if문은 표현식이 아닌 일반 문으로 분류된다. 따라서 JSX 내에서는 if문을 사용할 수 없는 것이다.

 

for 반복문을 사용할 수 없는것도 같은 원리이다.

 

 

JSX 내에서 조건문을 사용하려면?

1. 표현식에 해당하는 조건문 사용 (삼항연산자)

return(
    <div>
        {조건 ? <div>true</div> : <div>false</div>}
    </div>
)

조건이 참이면 왼쪽항목이, 거짓이면 오른쪽항목이 표시된다.

  • tip : 삼항연산자의 조건 내부에도 복잡한 조건식을 사용할 수 있다.
const [data, setData] = useState([]);

return(
    <div>
        {data.length > 0 ? <div>{data}</div> : <div>loading...</div>}
    </div>
)

state의 데이터가 나중에 채워지는 경우(서버에서 데이터를 불러와야 하는 경우) 불러오는 값이 배열값인 경우가 있다.

이때 state의 기본값을 빈 배열로 두면 map함수등을 사용할때 에러없이 사용할 수 있으며 데이터의 일관성을 유지하여 타입에러를 방지할수도 있다.

해당 state의 length값 (data.length)이 0을 초과하는지 검사하는 조건을 활용하여 데이터가 채워지기전까지 로딩메시지를 띄워줄 수 도 있다.

 

2. 논리 연산자 활용

return(
    <div>
        {id && <div>{id}님, 반갑습니다.</div>}
    </div>
)

userId값이 존재하면 우측의 <div>가 표시된다.

 

 

그럼에도 if문을 사용하고 싶다면?

1. JSX 외부에서 if문 사용

function App({id}) {
    function welcomeMsg() {
        if (id) {
            return <div>{id}님, 반갑습니다.</div>;
        }
    }
    return (
        <div>
            {WelcomeMsg();}
        </div>
    );
}

 

2. 분리된 컴포넌트에서 if문 사용

function Welcome({id}) {
    if (id) {
        return <div>{id}님, 반갑습니다.</div>;
    } else {
        return <div>로그인해주세요</div>;
    }
}

function App() {
    return (
        <div>
            <Welcome id={userId} />
        </div>
    );
}

 

3. 즉시실행함수 사용 (비권장)

return (
    <div>
        {(function () {
            if (id) {
                return <div>{id}님, 반갑습니다</div>;
            }
        })()}
    <div>
)

 

 

 

특수한 경우를 제외하면 대부분의 경우 삼항연산자와 논리연산자를 활용해서 대부분의 조건문을 처리할 수 있다.

'웹 > React' 카테고리의 다른 글

Styled-Components의 transient props ($ 기호로 prop 사용하기)  (0) 2024.06.27
JSX의 마우스 over, enter, out, leave와 이벤트버블링  (0) 2024.05.19
무한스크롤 : IntersectionObserver와 useRef  (0) 2024.04.14
useState의 setter함수와 함수형 업데이트  (0) 2024.04.14
useRef : 리액트 렌더링과 비동기적인 작업 처리  (0) 2023.10.29
'웹/React' 카테고리의 다른 글
  • Styled-Components의 transient props ($ 기호로 prop 사용하기)
  • JSX의 마우스 over, enter, out, leave와 이벤트버블링
  • 무한스크롤 : IntersectionObserver와 useRef
  • useState의 setter함수와 함수형 업데이트
루트노트
루트노트
  • 루트노트
    루트노트
    루트노트
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • 웹 (46)
        • HTML, CSS (11)
        • JS (11)
        • Node.js (3)
        • React (10)
        • Next.js (8)
        • MongoDB (1)
        • Design (2)
      • 애플리케이션 (5)
        • Swift (4)
        • React Native (1)
      • AI (0)
        • 컴퓨터 비전 (영상처리) (0)
      • 임베디드 (4)
        • 아두이노 (0)
        • 라즈베리파이 (0)
        • 젯슨 (1)
        • 리눅스 (3)
      • 컴퓨터 과학 (18)
        • 자료구조 (0)
        • 알고리즘 • 수학 (3)
        • 백준 문제풀이 (4)
        • 프로그래머스 문제풀이 (9)
        • 기타 (2)
      • 개인 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 최근 글

  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
루트노트
JSX에서 조건문 사용하기
상단으로

티스토리툴바