Koras02
Koras02코딩웹
Koras02
전체 방문자
오늘
어제
  • 분류 전체보기 (299)
    • 백엔드 (59)
      • nestjs (2)
      • Ruby (3)
      • PostgresQL (11)
      • MySQL (5)
      • Haskell (7)
      • Koa (3)
      • Java (3)
      • Python (5)
      • Rust (5)
      • MongoDB (2)
      • PHP (3)
      • Spring Boot (1)
      • redis (5)
      • deno (2)
    • 웹서버 (3)
      • nginx (1)
      • Apache (2)
      • Google Web Server (0)
    • 모바일개발 (5)
      • Figma (0)
      • React Native (2)
      • swift (0)
      • Flutter (3)
      • Kotlin (0)
    • 프론트 엔드 (158)
      • HTML (34)
      • CSS (7)
      • Javascript (35)
      • Angular (0)
      • Typescript (2)
      • React (58)
      • Vue (2)
      • GIT (6)
      • GraphQL (1)
      • Doker (4)
      • Go (8)
      • svelte (1)
      • gatsby (0)
    • etc. (47)
      • Notion (0)
      • TIL (24)
      • Algorithm (17)
      • Algorithm 개념 정리 (2)
      • Wiki (3)
      • Official document (1)
    • 웹개념 (12)
    • 변수정리 (1)
    • VSCode (2)
    • 포트폴리오 분석 (2)
      • React (2)
    • os (5)
      • 윈도우 (4)
      • Mac (0)
      • 가상머신 (0)
      • linux (1)
    • 응용프로그램언어 (2)
      • C (2)
      • C++ (0)
      • C# (0)
    • 블로그 운영관련 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
글쓰기

공지사항

  • [공지사항] 개발 이슈나 공식문서 업데이트 업로드 예정입니⋯

인기 글

태그

  • 데이터 타입
  • Til
  • go
  • 알고리즘
  • html
  • 하스켈
  • React
  • Haskell
  • PostgreSQL
  • 문자열
  • mysql
  • Java
  • 프로그래머스
  • html5
  • redis
  • javascript
  • Flutter
  • Rust
  • koa
  • CSS

티스토리

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
Koras02

Koras02코딩웹

[React] React 조건부 렌더링
프론트 엔드/React

[React] React 조건부 렌더링

2022. 1. 16. 16:59
728x90

React 조건부 렌더링 이란?

조건부 렌더링은, 특정 조건에 따라 다른 결과물을 렌더링 하는 것을 의미한다. 

React에서 원하는 동작을 수행하는 캡슐화된 별개의 컴포넌트를 생성할 수 있다. 또한 State에 의존하여

그 중 일부만 렌더링 시키는 것도 가능하다.

 

크게 3가지 방법으로 나눠 소개할 수 있다.

  • if-else 조건문
  • 논리 연산자 &&
  • 조건부 연산자

1. if - else 조건문

사용자가 로그인 하는 여부에 따라서 <UserGreeting/> 또는 <GuestGreeting/> 컴포넌트를 표현하는 예시이다.

function Gretting(props) {
   const isLoggedIn = props.isLoggedIn;
   if (isLoggedIn) { // 로그인 상태라면 
      return <UserGreeting />;
   }
   
   return <GuestGreeting />;
}


ReactDOM.render(
// Try changing to isLoggedIn={true}
  <Greeting isLoggedIn={false} />
  document.getElementById("root")
)

if-else 패턴은 컴포넌트가 조건에 따라 렌더링할 내용을 전체가 결정되는게 특징이다. 이 패턴에서는 컴포넌트의 

일부분인 선택적으로 렌더링하기에 적합하지 않다.

 

예를 들어서 아래와 같이 if-else문을 적용하면 제대로 작동하지 않는다.

function Greeting(props) {
   const isLoggedIn = props.isLoggedIn;
   
   return (
     <React.Fragment>
       {
          // 'Unexpected token' error 발생
          if (isLoggedIn) {
            return <UserGreeting />;
          } else {
            return <GeustGreeting />;
          }
       }
     </React.Fragment>
   )
}

if-else 패턴을 사용하면서 일부분만 렌더링 하려면 즉시 실행 함수 (IIFE)를 사용해야 한다.

function Greeting(props) {
    const isLoggedIn = props.isLoggedIn;

    return (
        <React.Fragment>
        {
            // 즉시 실행 함수 IIFE
            (() => {
                    if (isLoggedIn) {
                        return <UserGreeting />;
                    }
                    else {
                        return <GeustGreeting />;
                    }
                }
            )();
        }
        </React.Fragment>
    );
}

즉시 실행 함수를 사용한 if-else 패턴은 가독성이 떨어지는 문제가 발생한다. 또한 if-else 패턴으로 렌더링 대상 전체가

변경되었다면, 새로운 컴포넌트를 작성하는게 더 적합하기 떄문에 if else 패턴은 효과적으로 활용하기 어려운 패턴이다.

 

2. 논리 연산자 &&

논리연산자 &&는 "두 피연산자가 true일때 결론적으로 true를 반환"이라고만 알고 있었다.

그런데 자바스크립트에서는 true && expression은 항상 expression으로 평가되고

false && expression은 항상 false로 평가되기 때문에 조건부 렌더링할때 유용하게 사용할 수 있다.

 

또한 중괄호 {}로 감싸면 JSX에 어떤 표현식이던 넣을 수 있었다. 자바스크립트의 논리연산자 &&도 포함이다.

function MyPage(props) {
   const unreadMessages = props.unreadMessages;
   return (
      <div>
        <h1>Hello kim!</h1>
        {unreadMessages.length > 0 && 
           <h2>
             You have {unreadMessages.length} unread messages;
           </h2>
       }
     </div>
   );
}

const messages = ['React', 'Re:React', 'Re:Re: React'];
ReactDOM.render(
  <MyPage unreadMessages={messages} />,
  document.getElementById('root');
)

위 코드는 unreadMessage.length > 0 일때 <h2/> 태그의 내용을 나타내는 예시이다.

 

3. 조건부 연산자 ( 삼항 연산자 )

자바스크립트 조건부 연산자인 condition ? true : false 를 사용하면 조건부 렌더링을 구현해줄 수 있다.

function WaringBanner(props) {
   if (!props.warn) {
      // wran == false 이면 
      return null;
   }
   
   return (
      <div className="warning"> Warning! </div>
   
   );
}

□ Props값 설정을 생략한다면 ?

컴포넌트 props 값을 설정하게 될때 만약 props 이름만 작성하고 값을 따로 설정안한다면, true로 간주된다.

import React from 'react';
import Hello from './Hello';

function App() {
  return (
    <div>
      <Hello name="Kim" color="red" isPerson />
      <Hello color="blue"/>
    </div>
  );
}

export default App;

이와 같이 isPerson만 props로 넘겨주었는데, 이는 isPerson = {true}와 동일한 의미라고 할 수 있다.


참고자료

https://velog.io/@yoonvelog/React-%EC%A1%B0%EA%B1%B4%EB%B6%80-%EB%A0%8C%EB%8D%94%EB%A7%81

 

React 조건부 렌더링

조건부 렌더링이란, 특정 조건에 따라 다른 결과물을 렌더링하는 것을 의미합니다. React에서 원하는 동작을 수행하는 캡슐화된 별개의 컴포넌트를 생성할 수 있습니다. 또한, state에 의조나여 그

velog.io

 

'프론트 엔드 > React' 카테고리의 다른 글

[React] Virtual DOM 이란?  (0) 2022.01.16
[React] JSX 문법이란?  (0) 2022.01.16
[React] create-react-app & Typescript 초기 세팅법 완벽 정리  (0) 2021.10.21
    '프론트 엔드/React' 카테고리의 다른 글
    • [React] React Immutable
    • [React] Virtual DOM 이란?
    • [React] JSX 문법이란?
    • [React] create-react-app & Typescript 초기 세팅법 완벽 정리
    Koras02
    Koras02
    현재 사용중인 언어 - next-js,react,vue, typescript

    티스토리툴바