본문 바로가기

Front-end/React

[React] 조건부 렌더링(Conditional Rendering)

 

 

1. 조건부 렌더링(Conditional Rendering)

 

1) 개념

- 조건에 따라 렌더링의 결과가 달라지도록 하는 것

function Greeting(props) {
    const isLoggedIn = props.isLoggedIn;
    if(isLoggedIn) {
        return <UserGreeting />;
    } 
    return <GuestGreeting />;
}

-> props로 들어오는 isLoggedIn에 값(조건)에 따라서 화면에 출력하는 결과가 달라지게 됨

 

 

2) 엘리먼트 변수(Element Variables)

- 리액트 엘리먼트를 변수처럼 저장해서 사용하는 방법

function LoginControl(props) {
    //useState()훅을 사용해서 사용자의 로그인 여부를 자체적으로 관리
    const[isLoggedIn, setIsLoggedIn] = useState(false);

    const handleLoginClick = () => {
        setIsLoggedIn(true);
    };

    const handleLogoutClick = () => {
        setIsLoggedIn(false);
    }

    let button;
    if(isLoggedIn) {
        button = <LogoutButton onClick={handleLogoutClick} />;
    } else {
        button = <LoginButton onClick={handleLoginClick} />;
    }

    // isLoggedIn의 값에 따라서 button이라는 변수에 컴포넌트를 대입
    // 컴포넌트가 대입된 변수를 return에 넣어서 실제로 컴포넌트(실제로는 리액트 엘리먼트)가 렌더링 되도록 만들고있음
    // 엘리 먼트를 변수처럼 사용하는 방법을 엘리먼트 변수라고 함
    return (
        <div>
            <Greeting isLoggedIn={isLoggedIn} />
            {button}
        </div>
    );
}

 

 

3) 인라인 조건(Inline Conditions)

- 조건문을 코드 안에 집어 넣는 것

- 엘리먼트 변수를 선언해서 조건부 렌더링을 할 수 있지만 인라인 조건문은 코드가 더 간결해질 수 있음

- &&연산자 사용 시 조건문에 Falsy expression을 사용하면 뒤에 나오는 expression은 평가되지 않지만 falsy expression의 결과값은 리턴됨

 

 

 

a. 인라인 If

- If문을 필요한 곳에 직접 넣어서 사용

- 논리 연산자 &&을 사용(AND연산)

- 단축평가(short-circuit evaluation): 앞에 나오는 조건문이 true일 경우에만 뒤에 나오는 엘리먼트를 렌더링

true && expression -> expression
false && expression -> false

 

function Mailbox(props) {
    const unreadMessages = props.unreadMessages;

    return(
        <div>
            <h1> hi!!</h1>
            {unreadMessages.length > 0 &&
            <h2>현재 {unreadMessages.length} 개의 읽지 않은 메시지가 있습니다.</h2>
            }       
        </div>
    );
}

 

 

b. 인라인 If-Else

- If-Else문을 필요한 곳에 직접 넣어서 사용하는 방법

- 삼항 연산자  사용

function UserStatus(props) {
    return (
        <div>
            이 사용자는 현재 <b>{props.isLoggedIn ? '로그인' : '로그인 안한'}</b> 상태입니다.
        </div>
    );
}

 

- 조건에 따라 각기 다른 엘리먼트를 렌더링 하고싶을 때 사용

 

 

 

2. 컴포넌트 렌더링 막기 

 

- 리액트에서는 null을 리턴하면 렌더링되지 않음

function WarningBanner(props) {
    if(!props.warning) {
        return null;
    }
    return (
        <div>경고!!!!!</div>
    );
}

 

- 특정 컴포넌트를 렌더링하고 싶지 않을 경우 null을 리턴하면 됨

 

'Front-end > React' 카테고리의 다른 글

[React] 폼(form)  (0) 2023.05.14
[React] 리스트(List)와 키(Key)  (0) 2023.05.14
[React] 이벤트 핸들링(Event Handling)  (0) 2023.05.13
[React] 훅(Hook)  (0) 2023.05.11
[React] State와 생명주기(LifeCycle)  (0) 2023.05.10