function Welcome(props){
return <h1>Hello, {props.name}</h1>;
}
이 함수는 데이터를 가진 하나의 "props"(props는 속성을 나타내는 데이터)객체 인자를 받은 후 React엘리먼트를 반환하므로 React 컴포넌트 입니다.
class Welcome extends React.Component {
render(){
return <h1>Hello, {this.props.name}</h1>;
}
}
React관점에서 볼 때 위 두가지 유형의 컴포넌트는 동일하다.
const element = <Welcome name="Sara" />;function Welcome(pros){
return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Sara" />
ReactDom.render(
element,
document.getElementById('root')
);
<Welcome name="Sara" /> 앨리먼트로 ReactDOM.render()를 호출{name: "Sara"}를 props로 하여 Welcome 컴포넌트를 호출<h1>Hello, Sara</h1> 앨리먼트를 반환<h1>Hello, Sara</h1> 엘리먼트와 일치하도록 DOM을 효율적으로 업데이트※ 주의 : 컴포넌트의 이름은 항상 대문자로 시작합니다.
React는 소문자로 시작하는 컴포넌트를 DOM 태그로 처리한다.
예) </div>는 HTML div 태그를 나타내지만, <Welcome />은 컴포넌트를 나타내며 범위 안에 Welcome이 있어야 한다.
function Welcome(props){
return <h1>Hello, {props.name}</h1>;
}
function App() {
return (
<div>
<Welcome name="Sara" />
<Welcome name="Cahal" />
<Welcome name="Edite" />
</div>
);
}
function Comment(props) {
return(
<div className="Comment">
<div className="UserInfo">
<img className="Avatar"
src={props.author.avatarUrl}
alt={props.author.name}
/>
<div class="UserInfo-name">
{props.author.name}
</div>
</div>
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
이 컴포넌트는 author(객체), text(문자열) 및 date(날짜)를 props로 받은 후 소셜 미디어 웹사이트의 코멘트를 나타낸다.
이 컴포넌트는 구성요소들이 모두 중첩 구조로 이루어져 있어서 변경하기 어려울 수 있으며, 각 구성 요소를 개별적으로 재사용하기도 힘들다. -> 컴포넌트 추출이 필요
// Avatar 추출
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 class="UserInfo-name">
{props.author.name}
</div>
</div>
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
function UserInfo(props) {
return (
<div className="UserInfo">
<Avatar user={props.user} />
<div class="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>
);
}
function sum(a,b){
return a + b;
}
위에 sum 함수는 순수 함수라고 부른다. 입력값을 바꾸려 하지 않고 항상 동일한 입력값에 대해 동일한 결과를 반환하기 때문이다.
function withdraw(account, amount) {
account.total -= amount;
}
반면 withdraw 함수는 자신의 입력값을 변경하기 때문에 순수함수가 아니다.
※ 모든 React 컴포넌트는 자신의 props를 다룰 때 반드시 순수 함수처럼 동작해야한다.