[React]스프레드 연산자를 통한 속성 전달 방식- id 전달

2025. 3. 12. 01:39·Programming/React
728x90
반응형

 

 

🎈 속성(props) 전달에서 발생하는 문제와 해결 방법

리액트에서 커스텀 컴포넌트에 속성을 전달할 때, HTML의 기본 속성인 id나 className 같은 속성이 정상적으로 전달되지 않는 문제가 발생할 수 있습니다. 이 문제를 해결하는 방법과 함께, Forwarded Props를 이용해 어떻게 이러한 속성들을 전달할 수 있는지 설명해 보겠습니다.

 

 

1. 기본 코드 예시

먼저, 아래와 같은 기본 코드를 봅시다:

function UserProfile({name, age, children}) {
  return (
    <div >
      <h2>{name}</h2>
      <p>{age} years old</p>
      <div>{children}</div>  {/* 자식 요소 출력 */}
    </div>
  );
}

function App() {
  return (
    <UserProfile id="profile" className="user" name="John" age={30}>
      user
    </UserProfile>
  );
}

위 코드에서는 App 컴포넌트에서 UserProfile 컴포넌트로 id와 className을 전달하고 있습니다. 하지만 커스텀 컴포넌트인 UserProfile은 HTML 기본 속성을 자동으로 전달하지 않기 때문에, id="profile"과 className="user"가 실제로 div 태그에 적용되지 않습니다.

 

 

2. 문제점: 속성이 전달되지 않음

리액트에서 UserProfile 같은 커스텀 컴포넌트는 JSX에서 전달받은 속성을 기본적으로 DOM 요소로 전달하지 않습니다. 예를 들어, id와 className은 UserProfile 컴포넌트 내부에서 사용되지 않으며, 이 때문에 CSS가 적용되지 않습니다.

 

 

3. 해결 방법 1: 명시적으로 전달하기

이 문제를 해결하려면, UserProfile 컴포넌트에서 id와 className 속성을 명시적으로 div 태그에 전달해야 합니다.

function UserProfile({ name, age, children, id }) {
  return (
    <div id={id}>
      <h2>{name}</h2>
      <p>{age} years old</p>
      <div>{children}</div>  {/* 자식 요소 출력 */}
    </div>
  );
}

function App() {
  return (
    <UserProfile id="profile" className="user" name="John" age={30}>
      user
    </UserProfile>
  );
}

위처럼 UserProfile 컴포넌트 내에서 id={id}와 같은 방식으로 속성들을 명시적으로 전달하면, id와 className이 div 태그에 적용됩니다. 하지만, 만약 전달할 속성이 많아진다면, 코드가 복잡해질 수 있습니다.

 

 

4. 해결 방법 2: 구조분해할당과 스프레드 연산자 사용하기

속성 전달을 더욱 간단하게 처리하려면, 구조분해 할당과 스프레드 연산자(...props)를 사용할 수 있습니다. 이렇게 하면, UserProfile 컴포넌트에서 전달받은 모든 속성들을 자동으로 div 태그에 전달할 수 있습니다.

function UserProfile({ name, age, children, ...props }) {// 'name', 'age', 'children'을 구조분해하고, 나머지 props는 'div'에 전달
  return (
    <div {...props}> {/* 모든 속성(props)을 div에 전달 */}
      <h2>{name}</h2>
      <p>{age} years old</p>
      <div>{children}</div>  {/* 자식 요소 출력 */}
    </div>
  );
}

function App() {
  return (
    <UserProfile id="profile" className="user" name="John" age={30}>
      user
    </UserProfile>
  );
}

위와 같이 스프레드 연산자(...props)를 사용하면, UserProfile 컴포넌트로 전달된 모든 속성이 div 태그에 자동으로 적용됩니다. 이제 id, className, 그리고 다른 속성들도 문제없이 div 태그에 전달되어 적용됩니다.

 

 

5. 결과

위 코드에서는 id="profile"과 className="user"가 div 태그에 정상적으로 적용되어, 스타일링이 잘 이루어집니다. 브라우저에서 렌더링된 HTML은 다음과 같을 것입니다:

<div id="profile" class="user">
  <h2>John</h2>
  <p>30 years old</p>
  <div>user</div>
</div>
반응형

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

[React] 컴포넌트 속성에 컴포넌트 전달하기  (0) 2025.03.18
[React] React 완벽 가이드 - 섹션 5: React로 투자 계산기 만들기 | 개발 회고  (0) 2025.03.18
[React] 함수형 컴포넌트의 반환 return 값 조건 & Fragment(프래그먼트) <>...</>  (0) 2025.03.11
[React] Element와 Componet의 차이  (0) 2025.03.11
[React] React 완벽 가이드 - 섹션 3: 리액트의 핵심 - 컴포넌트, JSX, 속성, 상태 등  (1) 2025.03.03
'Programming/React' 카테고리의 다른 글
  • [React] 컴포넌트 속성에 컴포넌트 전달하기
  • [React] React 완벽 가이드 - 섹션 5: React로 투자 계산기 만들기 | 개발 회고
  • [React] 함수형 컴포넌트의 반환 return 값 조건 & Fragment(프래그먼트) <>...</>
  • [React] Element와 Componet의 차이
제가안난데여♪(´ε`*)
제가안난데여♪(´ε`*)
기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 제가안난데여♪(´ε`*)
    안나의 전두엽 어딘가 🧠
    제가안난데여♪(´ε`*)
    기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • 간단하게 한스푼🥄 (1)
      • Programming (56)
        • Spring (16)
        • Vue.js (6)
        • Deep Learning (3)
        • DataBase (5)
        • React (26)
      • DevOps (21)
        • Docker (12)
        • Linux (4)
      • Algorithm (46)
        • 알고리즘 정리 (5)
        • 자료구조 (0)
        • PS - 백준 (28)
        • 99클럽 코테 스터디 (13)
      • Project (0)
        • CampFire (0)
      • 안나의 취뽀일기 (˵ •̀ ᴗ - ˵ ) ✧ (4)
        • SSAFY_9기 (2)
        • SW 부트캠프 (2)
  • 잔디 달력

    «   2025/07   »
    일 월 화 수 목 금 토
    1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31
  • 인기 글

  • 태그

    도커컨테이너
    Vue.js
    Vue.js 입문하기
    백준 java
    리액트 상태
    til
    linux
    자바 스택
    도커
    topology sort
    java 백준
    99클럽
    코딩테스트 준비
    front-end
    김영한
    React
    java stack
    springboot
    개발자 취업
    Spring
    백준 구현문제
    greedy
    stack
    알고리즘
    백준
    자바
    docker
    Vue
    항해99
    java
  • 07-20 12:48
    반응형
  • hELLO· Designed By정상우.v4.10.3
제가안난데여♪(´ε`*)
[React]스프레드 연산자를 통한 속성 전달 방식- id 전달
상단으로

티스토리툴바