: props는 성별이나 이름처럼 변하지 않는(immutable) 외부로부터 전달받은 값으로, 컴포넌트의 속성(property)을 의미한다.
예시) Welcome 컴포넌트를 여러 번 렌더링하는 App 컴포넌트
각각 <h1>Hello, Jieun!</h1>
<h1>Hello, GG!</h1>
, <h1>Hello, Bella!</h1>
를 렌더링한다.
function Welcome(props) {
return <h1>Hello, {props.name}!</h1>;
}
function App() {
return (
<div>
<Welcome name="Jieun" />
<Welcome name="GG" />
<Welcome name="Bella" />
</div>
);
}
클래스 컴포넌트 vs 함수 컴포넌트
- 클래스 컴포넌트 : class 문법으로 만든 컴포넌트
- 함수 컴포넌트 : 함수 문법으로 만든 컴포넌트
Hook이 나오기 전까지 state는 클래스 컴포넌트에만 다룰 수 있었으나, React 16.8 버전에서 Hook이 추가되며 함수 컴포넌트도 state를 다룰 수 있게 되었다.
function Parent() {
return (
<div>
<h1>I'm the parent.</h1>
<Child text={"I'm the child."} /> // 상위 컴포넌트에서 속성과 값을 전달한다.
</div>
);
};
function Child(props) { // 하위 컴포넌트에서 props를 전달받는다.
return (
<div>
<p>{props.text}</p> // props는 객체이므로 dot notation으로 값에 접근할 수 있다.
</div>
);
};
JSX에서 속성과 값 정의하는 법
HTML에서 속성과 값을 할당하는 방법과 유사하나, 전달하고자 하는 값을 중괄호
{}
를 이용해 감싸줘야 한다.<!--HTML--> <tag attribute="value"></tag>
// JSX <Component attribute={value}/>
props를 전달하는 또 다른 방법으로, 자식 컴포넌트의 여는 태그와 닫는 태그 사이에 value를 넣어 전달할 수 있다.
이 경우에는 props.children
으로 값에 접근할 수 있다.
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child>I'm the eldest child</Child>
</div>
);
};
function Child(props) {
return (
<div className="child">
<p>{props.children}</p>
// I'm the eldest child
</div>
);
};
const App = () => {
const itemOne = "React를";
const itemTwo = "배우고 있습니다.";
return (
<div className="App">
<Learn>{itemOne}{itemTwo}</Learn>
</div>
);
};
const Learn = (props) => {
return <div className="Learn">{props.children}</div>;
// React를 배우고 있습니다.
};
아래의 Hello 컴포넌트에 name
이라는 props를 전달하는 방법은 4가지가 있다.
function Hello(props) {
return <div>{props.name}{/div>;
}
function Say() {
return (
<Hello name="Jieun" />
);
}
const Say = () => <Hello name={"Jieun"} />;
function Say() {
const name = "Jieun";
return <Hello name={name} />;
}
function Say() {
const props = {
name: "Jieun"
};
return <Hello {...props} />;
}
❔ 학습 후 궁금한 점
useState()
구조 분해 할당?- state hook?