Props란?

리액트에서는 부모가 자식 컴포넌트에 단일 객체 형태로 값을 전달할 수 있다. 이 객체를 리액트에서는 props라 한다. 리액트에서는 보통 내용은 다르지만 구조가 같은 요소들을 재사용하기 위해 컴포넌트로 만든다. 이 요소들을 페이지에 표시할 때는 이 컴포넌트를 반복해 렌더링하고, 게시물 각각의 내용을 props로 전달한다.

Props로 값 전달하기

부모만이 자식 컴포넌트에 props를 전달할 수 있다는 것에 주의한다. 그 역은 성립하지 않는다.

Props로 컴포넌트 전달하기

지금까지는 컴포넌트 간에 Props로 문자열이나 숫자 같은 자바스크립트 값들을 전달했지만, 사실 Props로 자바스크립트 값뿐만 아니라 컴포넌트도 전달할 수 있다.


function ChildComp() { // 새로운 컴포넌트!
  return <div>child component</div>;
}

// 부모 컴포넌트
function App() {
  return (
    <div className="App">
      <Header />
      <Body>
        <ChildComp /> // 배치된 컴포넌트는 자동으로 Props의 children 프로퍼티에 저장
      </Body>
      <Footer />
    </div>
  );
}

export default App;

리액트에서는 자식 컴포넌트에 또 다른 컴포넌트를 배치하면, 이 배치된 컴포넌트는 Props의 children이라는 프로퍼티에 저장되어 전달된다. 사용 방법은 다음과 같다.

// 자식 컴포넌트

function Body({ children }) { 
  console.log(children); 
  return <div className="body">{children}</div>; 
}
export default Body;

Props의 children 프로퍼티로 전달되는 자식 컴포넌트는 값으로 취급되므로, JSX의 자바스크립트 표현식을 사용할 수 있다. children에는 컴포넌트 ChildComp가 저장되어 있기 때문에 해당 컴포넌트를 렌더링한다.