목표
- 컴포넌트(component)와 props 대해 톺아본다.
// 함수형 컴포넌트
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
// 클래스형 컴포넌트
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
const element = <h1>hello</h1>
const element = <Welcome name="Sara" />;
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Sara" />;
ReactDOM.render(
element,
document.getElementById('root')
);
<h1>Hello, Sara</h1>
💡 주의
- 컴포넌트의 이름은 항상 대문자로 시작해야 한다.
- 리액트는 소문자로 시작하는 div, h1과 같은 컴포넌트를 DOM 태그로 처리한다.
- 따라서, 사용자 정의 컴포넌트를 만들 때에는 Welcome과 같이 대문자로 먼저 시작해야 한다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
function Compoisition(props) {
return (
<>
<Welcome name="Sara" />
<Welcome name="Cahal" />
<Welcome name="Edite" />
</>
)
}
function App() {
return (
<>
<Compoisition />
</>
);
}
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>
);
}
function Avatar(props) {
return (
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name}
/>
);
}
function Comment(props) {
return (
<div className="Comment">
<div className="UserInfo">
<Avatar user={props.author} />
<div className="UserInfo-name">
{props.author.name}
</div>
</div>
// 생략
</div>
);
}
props의 이름은 사용될 context가 아닌 컴포넌트 자체의 관점에서 짓는 것을 권장한다.
다음에는 Avatar 컴포넌트 옆에 사용자의 이름을 렌더링하는 UserInfo 컴포넌트를 추출하면 다음과 같다.
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>
);
}
function sum(a, b) {
return a + b;
}
순수 함수
- 외부 상태에 의존하지도 않고 변경하지도 않는, 즉 부수 효과가 없는 함수를 말한다.
- 즉, 순수 함수는 외부 상태에 전혀 의존하지 않고 매개변수로 전달된 인수에게만 의존해 반환값을 만든다.
function withdraw(account, amount) {
account.total -= amount;
}
모든 리액트 컴포넌트는 자신의 props를 다룰 때 반드시 순수 함수처럼 동작해야 합니다.