오늘 알아볼 것
Component
재사용이 가능한 각각의 독립된 모듈을 뜻한다.
Props
property의 약자로 부모에게 받아온 데이터이다. 사전적으로 성질, 속성의 의미를 가지고 있다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
함수 컴포넌트
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
클래스 컴포넌트
React가 볼 때 위 두가지 유형의 컴포넌트는 동일하다.
React 엘리먼트는 사용자 정의 컴포넌트로도 나타낼 수 있다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Sara" />;
ReactDOM.render(
element,
document.getElementById('root'));
컴포넌트의 이름은 항상 대문자로 시작한다.
Element가 소문자로 시작하는 경우에는 div태그와 같이 내장 컴포넌트라는 것을 뜻하기 때문에 컴포넌트는 대문자로 사용한다.
컴포넌트는 자신의 출력에 다른 컴포넌트를 참조할 수 있다.
이는 모든 세부 단계에서 동일한 추상 컴포넌트를 사용할 수 있다는 것을 의미한다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
function App() {
return (
<div>
<Welcome name="Sara" />
<Welcome name="Cahal" />
<Welcome name="Edite" />
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
컴포넌트를 작게 나눠서 가독성과 재사용성을 높힐 수 있다.
function Comment(props) {
return (
<div className="Comment">
<div className="UserInfo">
<img className="Avatar"
src={props.author.avatarUrl}
alt={props.author.name}
/>
<div className="UserInfo-name">
{props.author.name}
</div>
</div>
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
Component를 잘게 쪼개서 작성한다면,
function Avatar(props) {
return (
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name}
/>
);
}
function UserInfo(props) {
return (
<div className="UserInfo">
<Avatar user={props.user} />
<div className="UserInfo-name">
{props.user.name}
</div>
</div>
);
}
function Comment(props) {
return (
<div className="Comment">
<UserInfo user={props.author} />
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
컴포넌트의 자체 props를 수정해서는 안된다.
**모든 React컴포넌트는 자신의 props를 다룰 때 반드시 순수 함수처럼 동작해야 한다.
순수함수
어떤 함수에 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수