inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React 완벽 마스터: 기초 개념부터 린캔버스 프로젝트까지

조건부 렌더링

조건부 렌더링에서 로직 처리 차이

153

wofjeiong2ewg23

작성한 질문수 15

0

export default function CourseItem({title, description, thumbnail, isFavorite}) {
    let defaultIconTag =  "/img/heart/heart-icon.svg"
    if (isFavorite) {
        defaultIconTag = "/img/heart/heart-fill-icon.svg"
    }
    return (
        <article className="course">
            <img className="course__img" src={thumbnail} alt="강의 이미지"/>
            <div className="course__body">
                <div className="course__title">{title}</div>
                <div className="course__description">{description}</div>
            </div>
            <div className="course__icons">
                <button className="btn">
                    <img className="icon-heart" src={defaultIconTag} />
                </button>

            </div>
        </article>
    );
}

저는 기존 CourseItem메서드 내에서 변수를 생성해서 만들었는데 강의에서는 새로운 메서드를 생성해서 진행하더라고요.

메서드를 따로 생성해서 버튼 태그랑 묶어서 같이 넘기신 이유가 있나요? 현업에서 어떤 방식을 더 선호할까요?

 

react React-Context react-router tailwindcss react-query

답변 1

0

짐코딩

React 컴포넌트를 구조화하는 두 가지 방식에 대해 설명드리겠습니다.

두 방법 모두 동작은 동일하지만, 각각 다음과 같은 장단점이 있습니다:

현재 작성하신 방식:

let defaultIconTag = "/img/heart/heart-icon.svg"
if (isFavorite) {
    defaultIconTag = "/img/heart/heart-fill-icon.svg"
}
  • 장점: 코드가 간단하고 직관적입니다

  • 단점: 로직이 복잡해지거나 재사용이 필요한 경우 관리가 어려워질 수 있습니다

별도 메서드로 분리하는 방식:

const getHeartIcon = (isFavorite) => {
    return isFavorite 
        ? "/img/heart/heart-fill-icon.svg"
        : "/img/heart/heart-icon.svg";
}
  • 장점:

     

    • 로직을 재사용하기 쉽습니다

    • 테스트 작성이 용이합니다

    • 컴포넌트 로직과 UI 렌더링 로직을 명확히 분리할 수 있습니다

  • 단점: 간단한 로직의 경우 오히려 코드가 복잡해질 수 있습니다

저의 경우 별도 메서드로 분리하는 방식을 선호하는 편입니다. 그 이유는:

1. 코드 유지보수가 쉬워집니다

2. 로직이 복잡해지더라도 깔끔하게 관리할 수 있습니다

3. 다른 컴포넌트에서도 해당 로직을 재사용하기 쉽습니다

하지만 이는 절대적인 규칙은 아니며, 상황과 팀의 컨벤션에 따라 유연하게 선택하시면 됩니다. 현재처럼 단순한 조건문의 경우는 변수로 처리하는 것도 충분히 좋은 방법입니다.

오타?

0

28

1

뭐하나 여쭤봐도 될까요?

0

70

1

안녕하세요 질문이 있습니다.

0

55

2

질문 : 삭제 버튼 아규먼트 (id)

0

50

1

Tailwind 버전 확인

0

62

1

align-items 정렬

0

50

2

vite 명령어로 프로젝트를 만들었습니다. (vscode)

0

79

1

31. 객체 업데이트 하기 - 10:15 질문

1

55

2

강의교안, 내용 인용해서 블로그 글 작성

1

80

2

이미지가 출력되지 않아요

1

74

2

강의와 만들어진 코드가 달라요

0

76

3

AI와 CSS 라이브러리의 궁합

0

95

1

onClick 이벤트에 함수 넘길 때

0

65

1

린캔버스 기능 구현은 왜 못하나요.... 구현하고 싶습니다...

0

101

1

notes 없음 읽기 오류

0

72

1

Object.assign 문법

0

64

1

react-router 전혀 기능 안함

0

53

1

react-router-dom@6.25.1

0

47

1

React Router 최신 스펙

0

207

1

Immer 에서 filter, map 사용

0

54

1

vite 설치에 대해 질문있습니다.

0

76

2

라이브러리 버전 일치 이슈

0

76

1

"Enter 키 발생 시 항목 추가" 부분에서 공백이 포함되면 한 줄이 더 입력됩니다

0

49

2

TotalCounter을 작성할때

0

65

2