지난 시간에 이어 리액트 컴포넌트 사이에 데이터를 전달하는 props 에 대해 알아보고, 프론트엔드의 기초를 마무리해 볼게요.
리액트의 컴포넌트는 props 를 통해 서로 데이터를 주고받아요. 모든 부모 컴포넌트는 props 를 통해 자식 컴포넌트 방향으로 데이터를 전달해 줄 수 있어요.
props 는 HTML의 속성(attribute)처럼 작성해서 사용하지만, 문자열뿐만 아니라 객체, 배열, 함수 등 자바스크립트의 다양한 값을 전달할 수 있어요.
// Props.tsx
import React from "react";
interface IProps {
weather: string;
children: React.ReactNode;
}
const Props: React.FC<IProps> = ({ children, weather }) => {
// const { children, weather } = props; 와 같이 구조분해할당을 사용할 수 있어요.
return (
<div>
<h2>{children}</h2>
today's weather is {weather}.
</div>
);
};
export default Props;
// App.tsx
function App() {
return (
<div className="App">
<Props weather="sunny">Weather Forecast</Props>
</div>
);
}
위 코드는 함수형 컴포넌트를 사용해 props 를 구현한 예시예요. 자식 컴포넌트에서는 props 를 함수의 매개변수처럼 받아올 수 있고, 구조분해할당을 활용하면 코드를 더 깔끔하게 작성할 수 있어요.
부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 때는 HTML의 속성처럼 이름을 적고 값을 넘겨주면 돼요. 컴포넌트 태그 사이에 있는 내부 요소나 텍스트를 넘겨주고 싶을 때는 children 이라는 특수한 속성을 통해 값을 전달받을 수 있어요.
참고로 리액트 환경에서 타입스크립트를 원활하게 사용하려면, React.FC 나 React.ReactNode 같은 리액트 전용 타입들을 미리 알아두는 것이 좋아요.
프론트엔드 기초를 마치며 앞으로 가져가야 할 공부 방향을 정리해 보았어요.