inflearn logo
강의

講義

知識共有

一口サイズでかじり取るReact.js:基礎から実践まで

5.4) Propsでデータを渡す

컴포넌트 부모 태그

430

rhs199813739

投稿した質問数 5

0

안녕하세요! 좋은 수업 잘 듣고 있습니다 :)

props로 컴포넌트를 받는 Container 컴포넌트에 대해 질문이 있습니다!

JSX 규칙 중에 모든 컴포넌트는 부모 태그를 가지고 있어야 한다고 말씀해주셨는데 아래 코드처럼 Container는 부모 태그가 없이도 잘 동작하기에 이유가 무엇인지 궁금합니다!

function App() { 
  const counterprops = { 
    a : 1,
    b : 2,
    c : 3,
    d : 4,
    initialVaule : 5,
  };
  return ( // HTML을 반환
  <Container>
    <div className="App">
      <Counter {...counterprops}/> 
    </div>
   </Container>
  );
}

또한

function App() { 
  const counterprops = { 
    a : 1,
    b : 2,
    c : 3,
    d : 4,
    initialVaule : 5,
  };
  return ( // HTML을 반환
  
    <div className="App">
      <Container>
        <Counter {...counterprops}/> 
      </Container>
    </div>
   
  );
}

이렇게 코드를 짜면 동작하지 않더라구요!

왜 첫번째 코드는 동작하고, 두번째 코드는 동작하지 않는지 궁금합니다!

감사합니다.

javascript react node.js

回答 2

0

rhs199813739

앗 제가 컴포넌트에 부모 태그가 있어야 한다는 것을 잘못이해하고 있었던 것 같습니다 ㅠ

  • 제가 처음에 이해했던 것은

function App() { 
  const counterprops = { 
    a : 1,
    b : 2,
    c : 3,
    d : 4,
    initialVaule : 5,
  };
  return ( 
  
    <div className="App">// 2-2. 이게(부모태그) 필요
      <Container> // 2-1. 이게(부모태그) 필요 / 1-2. Container를 넣을때
        <Counter {...counterprops}/> // 1-1. Counter를 넣을때
      </Container>
    </div>
   
  );
}

이런 식으로 "부모 컴포넌트(App)에 자식 컴포넌트(Counter)를 넣을 때" 부모 컴포넌트 return 문 내에서 자식 컴포넌트를 감싸는 부모태그가 있어야 한다고 이해했습니다.

  • 현재 이해한 것은

function App() { 
  const counterprops = { 
    a : 1,
    b : 2,
    c : 3,
    d : 4,
    initialVaule : 5,
  };
  return ( // HTML을 반환
  
    <div className="App"> 2. 이런 최상위 부모태그가 필요
      // 1. 여기 코드를 리턴하려면
    </div>
   
  );
}

"컴포넌트를 생성할 때" 즉, App 컴포넌트를 만들 때라고 가정하면, <div className="App"></div> 이렇게 최상위 부모 태그를 만들고 그 안에 return할 코드를 넣어줘야 한다는 점입니다.

제가 두 번째로 이해한 부분이 맞는 것인가요??

0

winterlood

안녕하세요 이정환입니다.

우선 컴포넌트 내부의 최상위 태그는 꼭 HTML 태그일 필요는 없습니다. 리액트 컴포넌트여도 무방합니다.

따라서 다음과 같이도 작성 가능합니다

function App() { 
  const counterprops = { 
    a : 1,
    b : 2,
    c : 3,
    d : 4,
    initialVaule : 5,
  };
  return ( 
    <Container> // 최 상위 태그
      <Counter {...counterprops}/> // children Props
    </Container>
  );
}

0

rhs199813739

아하 그렇군요! 답변 감사합니다 :)

0

winterlood

안녕하세요 이정환입니다.

우선 위에 보내주신 코드의 경우 App 컴포넌트의 return문 내부에서는
Container 컴포넌트가 최 상위 부모 태그가 되어서 정상적으로 작동하는 걸로 보입니다.
물론 Container 컴포넌트와 Counter 컴포넌트의 내부 구현을 보지 못했기 때문에 어떻게 동작하는지는 알 수 없지만요

질문중에 Container 컴포넌트가 부모 태그가 없다고 말씀해주셨는데요 잘 이해가 되지 않습니다. 혹시 다시 한번 설명을 부탁드려도 괜찮을까요?

또 그 아래의 코드가 동작하지 않는 이유는 보내주신 코드만 봐서는 오류의 원인을 정확히 파악하기 어렵습니다 😢 전체 프로젝트 코드를 코드샌드박스에 담아 보내주시면 원인을 파악할 수 있을것 같습니다.

Editor Component의 최적화 불가능 이슈

0

17

2

useCallback ⊂ useMemo

0

21

2

라이브러리 설치 질문

0

26

2

linter 질문

0

32

2

감정일기장 vercel 배포 후 새로 고침 시 404페이지가 뜨는 이유

0

37

2

Sort 메서드 관련 아티클

0

41

2

4.1) React.js를 소개합니다 강의를 듣고 궁금한 점이 생겼습니다.

0

41

2

html, body에 적용하는 css 스타일 질문입니다.

0

38

2

eslint.config.js 설정 질문입니다.

0

86

2

존재하지 않는 일기 url입력 시 alert이 두 번 떠요

0

64

1

교재(3쇄)와 강의 내용 문의

0

64

2

12.13) 하단 여백 스타일링 관련 질문 드립니다.

0

87

2

에러 질문드립니다

0

102

2

VSCode 설정 문의

0

131

2

PPT 코드 관련 질문

0

66

2

useEffect와 lifecycle문의

0

87

2

프론트엔드 학습 수준 문의

0

106

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

109

2

데이터 로딩중 화면만 계속 나와요!!

0

99

2

퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요

0

128

2

이후의 커리큘럼 문의

0

151

2

실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.

0

104

2

최적화 관련 질문있습니다 (useMemo 등)

0

126

3

프로바이더 컴포넌트의 위치는 어떤 기준인가요?

1

124

3