리액트 기초 : 조건부 렌더링

리액트에서 사용하는 조건부 렌더링과 리스트 렌더링에 대해서 알아보겠습니다.

조건부 렌더링

기본적인 사용 형태

function Item({name, isPacked}) {
    if (isPacked) {
        return <li className="item">{name} Checked!</li>;
    }
    return <li className="item">{name}</li>;
}

export default function PackingList() {
    return (
        <section>
            <h1>Sally Ride's Packing List</h1>
            <ul>
                <Item
                    isPacked={true}
                    name="Space suit"
                />
                <Item
                    isPacked={true}
                    name="Helmet with a golden leaf"
                />
                <Item
                    isPacked={false}
                    name="Photo of Tam"
                />
            </ul>
        </section>
    );
}

props로 boolean 데이터를 받아 체크 표시 여부를 결정하는 소스입니다.
이 소스가 문제는 없지만 중복 소스로 인해 유지보수가 어렵습니다.

null의 활용

if (isPacked) {
    return null;
}
return <li className="item">{name}</li>;

null을 반환하여 아무것도 표시하지 않을수도 있습니다.

삼항연산자 활용

return (
    <li className="item">
        {isPacked ? name + 'Checked' : name}
    </li>
);

삼항연산자를 활용해 쉽게 표현 할 수 있습니다.

return (
    <li className="item">
        {name} {isPacked && 'Checked'}
    </li>
);

AND 연산자라도 표시 할 수 있습니다.

변수 할당 활용

function Item({name, isPacked}) {
    let itemContent = name;
    if (isPacked) {
        itemContent = name + "Checked";
    }
    return (
        <li className="item">
            {itemContent}
        </li>
    );
}

export default function PackingList() {
    return (
        <section>
            <h1>Sally Ride's Packing List</h1>
            <ul>
                <Item
                    isPacked={true}
                    name="Space suit"
                />
                <Item
                    isPacked={true}
                    name="Helmet with a golden leaf"
                />
                <Item
                    isPacked={false}
                    name="Photo of Tam"
                />
            </ul>
        </section>
    );
}